/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./src/App.js"
/*!********************!*\
!*** ./src/App.js ***!
\********************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ App)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ "./node_modules/axios/lib/axios.js");
/* harmony import */ var _App_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/App.css */ "./src/App.css");
/* harmony import */ var _data_portfolio__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/data/portfolio */ "./src/data/portfolio.js");
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var _components_desktop_BootScreen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/desktop/BootScreen */ "./src/components/desktop/BootScreen.jsx");
/* harmony import */ var _components_desktop_MenuBar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/desktop/MenuBar */ "./src/components/desktop/MenuBar.jsx");
/* harmony import */ var _components_desktop_Clouds__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/desktop/Clouds */ "./src/components/desktop/Clouds.jsx");
/* harmony import */ var _components_desktop_StickyNote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/desktop/StickyNote */ "./src/components/desktop/StickyNote.jsx");
/* harmony import */ var _components_desktop_PixelGirl__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/desktop/PixelGirl */ "./src/components/desktop/PixelGirl.jsx");
/* harmony import */ var _components_desktop_DesktopIcon__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/desktop/DesktopIcon */ "./src/components/desktop/DesktopIcon.jsx");
/* harmony import */ var _components_desktop_Window__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/desktop/Window */ "./src/components/desktop/Window.jsx");
/* harmony import */ var _components_desktop_Dock__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/desktop/Dock */ "./src/components/desktop/Dock.jsx");
/* harmony import */ var _components_desktop_TrashCan__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/desktop/TrashCan */ "./src/components/desktop/TrashCan.jsx");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/App.js",
_s = __webpack_require__.$Refresh$.signature(),
_s2 = __webpack_require__.$Refresh$.signature();
const API = `${"https://pixel-mac-portfolio-1.preview.emergentagent.com"}/api`;
const RESUME_URL = "https://customer-assets.emergentagent.com/job_pixel-mac-portfolio-1/artifacts/hw3qazg7_preksha_resume_final.pdf";
// ---------- Window content renderers ----------
function ProjectWindow({
project
}) {
var _project$stack;
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": `content-${project.id}`,
"x-file-name": "App",
"x-line-number": "24",
"x-column": "4",
"x-component": "div",
"x-id": "App_24_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("img", {
src: project.image,
alt: project.title,
className: "pixelated",
style: {
width: "100%",
maxHeight: 200,
objectFit: "cover",
border: "2px solid #000",
marginBottom: 12
},
"x-file-name": "App",
"x-line-number": "25",
"x-column": "6",
"x-component": "img",
"x-id": "App_25_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 25,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h2", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 12,
margin: "0 0 12px",
color: "#231a2e"
},
"x-file-name": "App",
"x-line-number": "37",
"x-column": "6",
"x-component": "h2",
"x-id": "App_37_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "project",
"x-source-path": "title",
"x-source-editable": "false",
children: project.title
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 37,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginTop: 0
},
"x-file-name": "App",
"x-line-number": "47",
"x-column": "6",
"x-component": "p",
"x-id": "App_47_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "project",
"x-source-path": "description",
"x-source-editable": "false",
children: project.description
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 47,
columnNumber: 7
}, this), ((_project$stack = project.stack) === null || _project$stack === void 0 ? void 0 : _project$stack.length) > 0 && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
marginTop: 12,
display: "flex",
flexWrap: "wrap",
gap: 6
},
"x-file-name": "App",
"x-line-number": "50",
"x-column": "8",
"x-component": "div",
"x-id": "App_50_8",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: project.stack.map(s => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 7,
border: "2px solid #000",
padding: "4px 6px",
background: "#ffd6e7"
},
"x-file-name": "App",
"x-line-number": "52",
"x-column": "12",
"x-component": "span",
"x-id": "App_52_12",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "project",
"x-source-editable": "false",
"x-array-var": "project",
"x-array-item-param": "s",
children: s
}, s, false, {
fileName: _jsxFileName,
lineNumber: 52,
columnNumber: 13
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 50,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
marginTop: 16
},
"x-file-name": "App",
"x-line-number": "68",
"x-column": "6",
"x-component": "div",
"x-id": "App_68_6",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: project.link ? /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("a", {
href: project.link,
target: "_blank",
rel: "noreferrer",
className: "clickable",
style: {
display: "inline-block",
fontFamily: "'Press Start 2P', monospace",
fontSize: 9,
padding: "8px 12px",
background: "#c9a7ff",
border: "2px solid #000",
color: "#231a2e",
textDecoration: "none",
boxShadow: "3px 3px 0 #000"
},
"data-testid": `link-${project.id}`,
"x-file-name": "App",
"x-line-number": "70",
"x-column": "10",
"x-component": "a",
"x-id": "App_70_10",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "project",
"x-source-path": "linkLabel",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
"data-ve-dynamic": "true",
"x-excluded": "true",
style: {
display: "contents"
},
"x-file-name": "App",
"x-line-number": "70",
"x-column": "10",
"x-component": "a",
"x-id": "App_70_10_expr1",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "project",
"x-source-path": "linkLabel",
"x-source-editable": "false",
children: project.linkLabel
}, void 0, false), " \u2192"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 70,
columnNumber: 11
}, this) : /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 8,
color: "#7c5b00"
},
"x-file-name": "App",
"x-line-number": "91",
"x-column": "10",
"x-component": "span",
"x-id": "App_91_10",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "project",
"x-source-path": "linkLabel",
"x-source-editable": "false",
children: project.linkLabel
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 91,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 68,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 24,
columnNumber: 5
}, this);
}
_c = ProjectWindow;
function AboutWindow() {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "content-about",
"x-file-name": "App",
"x-line-number": "102",
"x-column": "4",
"x-component": "div",
"x-id": "App_102_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
display: "flex",
gap: 14,
alignItems: "flex-start",
marginBottom: 12
},
"x-file-name": "App",
"x-line-number": "103",
"x-column": "6",
"x-component": "div",
"x-id": "App_103_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
width: 96,
height: 96,
border: "2px solid #000",
background: "linear-gradient(180deg,#ffd6e7,#c9a7ff)",
display: "flex",
alignItems: "center",
justifyContent: "center"
},
className: "pixelated",
"x-file-name": "App",
"x-line-number": "104",
"x-column": "8",
"x-component": "div",
"x-id": "App_104_8",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
transform: "scale(1.2)"
},
"x-file-name": "App",
"x-line-number": "113",
"x-column": "10",
"x-component": "div",
"x-id": "App_113_10",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(PixelPortrait, {
"x-file-name": "App",
"x-line-number": "114",
"x-column": "12",
"x-component": "PixelPortrait",
"x-id": "App_114_12",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 114,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 113,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 104,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"x-file-name": "App",
"x-line-number": "117",
"x-column": "8",
"x-component": "div",
"x-id": "App_117_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h2", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 12,
margin: "0 0 8px"
},
"x-file-name": "App",
"x-line-number": "118",
"x-column": "10",
"x-component": "h2",
"x-id": "App_118_10",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "OWNER",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "2",
"x-source-path": "fullName",
"x-source-editable": "true",
children: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.fullName
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 118,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
margin: 0
},
"x-file-name": "App",
"x-line-number": "121",
"x-column": "10",
"x-component": "p",
"x-id": "App_121_10",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "OWNER",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "2",
"x-source-path": "location",
"x-source-editable": "true",
children: ["Social Media & Content Strategist based in ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
"data-ve-dynamic": "true",
"x-excluded": "true",
style: {
display: "contents"
},
"x-file-name": "App",
"x-line-number": "121",
"x-column": "10",
"x-component": "p",
"x-id": "App_121_10_expr1",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "OWNER",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "2",
"x-source-path": "location",
"x-source-editable": "true",
children: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.location
}, void 0, false), ". I build creator-first digital ecosystems for lifestyle, F&B and beauty brands \u2014 currently orchestrating 7M+ monthly organic impressions across my own & client accounts."]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 121,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 117,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 103,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h3", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 10,
marginTop: 18
},
"x-file-name": "App",
"x-line-number": "129",
"x-column": "6",
"x-component": "h3",
"x-id": "App_129_6",
"x-dynamic": "false",
children: "// what I do"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 129,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("ul", {
style: {
paddingLeft: 20
},
"x-file-name": "App",
"x-line-number": "132",
"x-column": "6",
"x-component": "ul",
"x-id": "App_132_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "133",
"x-column": "8",
"x-component": "li",
"x-id": "App_133_8",
"x-dynamic": "false",
children: "Short-form video strategy (Reels, TikTok, YT Shorts)"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 133,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "134",
"x-column": "8",
"x-component": "li",
"x-id": "App_134_8",
"x-dynamic": "false",
children: "Creator & influencer partnerships"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 134,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "135",
"x-column": "8",
"x-component": "li",
"x-id": "App_135_8",
"x-dynamic": "false",
children: "Community + editorial planning"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 135,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "136",
"x-column": "8",
"x-component": "li",
"x-id": "App_136_8",
"x-dynamic": "false",
children: "Trend research and audience analytics"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 136,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 132,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h3", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 10,
marginTop: 18
},
"x-file-name": "App",
"x-line-number": "139",
"x-column": "6",
"x-component": "h3",
"x-id": "App_139_6",
"x-dynamic": "false",
children: "// stuff I have shipped"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 139,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("ul", {
style: {
paddingLeft: 20
},
"x-file-name": "App",
"x-line-number": "142",
"x-column": "6",
"x-component": "ul",
"x-id": "App_142_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "143",
"x-column": "8",
"x-component": "li",
"x-id": "App_143_8",
"x-dynamic": "false",
children: "5K \u2192 2M+ views in 2 weeks for a restaurant client"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 143,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "144",
"x-column": "8",
"x-component": "li",
"x-id": "App_144_8",
"x-dynamic": "false",
children: "1M+ impressions on LinkedIn personal brand"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 144,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "145",
"x-column": "8",
"x-component": "li",
"x-id": "App_145_8",
"x-dynamic": "false",
children: "Sponsored campaigns with Mars, Inc. & Colors Queen"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 145,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("li", {
"x-file-name": "App",
"x-line-number": "146",
"x-column": "8",
"x-component": "li",
"x-id": "App_146_8",
"x-dynamic": "false",
children: "20+ reels for Titan (Life at Titan / CSR / DEI)"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 146,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 142,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 102,
columnNumber: 5
}, this);
}
_c2 = AboutWindow;
function PixelPortrait() {
const px = (x, y, w, h, fill) => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("rect", {
x: x,
y: y,
width: w,
height: h,
fill: fill,
"x-file-name": "App",
"x-line-number": "153",
"x-column": "35",
"x-component": "rect",
"x-id": "App_153_35",
"x-dynamic": "false"
}, `${x}-${y}-${fill}`, false, {
fileName: _jsxFileName,
lineNumber: 153,
columnNumber: 36
}, this);
const skin = "#ffd7b5",
hair = "#ff8fb1",
eye = "#231a2e",
blush = "#ff9cbe",
outline = "#231a2e";
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("svg", {
width: "64",
height: "64",
viewBox: "0 0 16 16",
shapeRendering: "crispEdges",
className: "pixelated",
"x-file-name": "App",
"x-line-number": "156",
"x-column": "4",
"x-component": "svg",
"x-id": "App_156_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [px(4, 2, 8, 1, outline), px(3, 3, 10, 6, hair), px(4, 4, 8, 5, skin), px(6, 6, 1, 1, eye), px(9, 6, 1, 1, eye), px(5, 7, 1, 1, blush), px(10, 7, 1, 1, blush), px(7, 8, 2, 1, "#c85a7a"), px(3, 10, 10, 4, "#c9a7ff")]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 156,
columnNumber: 5
}, this);
}
_c3 = PixelPortrait;
function ContactWindow() {
_s();
const [form, setForm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
name: "",
email: "",
message: ""
});
const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("idle"); // idle | sending | ok | err
const [errMsg, setErrMsg] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
const send = async e => {
e.preventDefault();
if (!form.name || !form.email || !form.message) {
setStatus("err");
setErrMsg("all fields required, hero.");
return;
}
setStatus("sending");
setErrMsg("");
try {
await axios__WEBPACK_IMPORTED_MODULE_1__["default"].post(`${API}/contact`, form);
setStatus("ok");
setForm({
name: "",
email: "",
message: ""
});
} catch (e) {
setStatus("err");
setErrMsg("something broke on my end. try email instead?");
}
};
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "content-contact",
"x-file-name": "App",
"x-line-number": "195",
"x-column": "4",
"x-component": "div",
"x-id": "App_195_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h2", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 12,
margin: "0 0 12px"
},
"x-file-name": "App",
"x-line-number": "196",
"x-column": "6",
"x-component": "h2",
"x-id": "App_196_6",
"x-dynamic": "false",
children: "say hi \uD83D\uDC8C"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 196,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "199",
"x-column": "6",
"x-component": "p",
"x-id": "App_199_6",
"x-dynamic": "false",
children: "I like collaborators who care about craft. Restaurants, beauty brands, indie creators, weirdly ambitious founders \u2014 slide in."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 199,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
marginTop: 16,
display: "flex",
flexDirection: "column",
gap: 10
},
"x-file-name": "App",
"x-line-number": "203",
"x-column": "6",
"x-component": "div",
"x-id": "App_203_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ContactLink, {
label: "EMAIL",
value: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.email,
href: `mailto:${_data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.email}`,
testId: "contact-email",
"x-file-name": "App",
"x-line-number": "204",
"x-column": "8",
"x-component": "ContactLink",
"x-id": "App_204_8",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 204,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ContactLink, {
label: "INSTAGRAM",
value: "@sinofgluttire",
href: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.instagram,
testId: "contact-ig",
"x-file-name": "App",
"x-line-number": "205",
"x-column": "8",
"x-component": "ContactLink",
"x-id": "App_205_8",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 205,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ContactLink, {
label: "LINKEDIN",
value: "preksha-krishnan",
href: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.linkedin,
testId: "contact-in",
"x-file-name": "App",
"x-line-number": "206",
"x-column": "8",
"x-component": "ContactLink",
"x-id": "App_206_8",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 206,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 203,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
marginTop: 22,
border: "2px dashed #000",
padding: 12,
background: "#fff5f7"
},
"x-file-name": "App",
"x-line-number": "209",
"x-column": "6",
"x-component": "div",
"x-id": "App_209_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 9,
marginBottom: 10
},
"x-file-name": "App",
"x-line-number": "217",
"x-column": "8",
"x-component": "div",
"x-id": "App_217_8",
"x-dynamic": "false",
children: "// or send a note"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 217,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("form", {
onSubmit: send,
style: {
display: "flex",
flexDirection: "column",
gap: 8
},
"x-file-name": "App",
"x-line-number": "226",
"x-column": "8",
"x-component": "form",
"x-id": "App_226_8",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("input", {
"data-testid": "contact-name",
value: form.name,
onChange: e => setForm({
...form,
name: e.target.value
}),
placeholder: "your name",
style: inputStyle,
"x-file-name": "App",
"x-line-number": "227",
"x-column": "10",
"x-component": "input",
"x-id": "App_227_10",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 227,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("input", {
"data-testid": "contact-form-email",
value: form.email,
onChange: e => setForm({
...form,
email: e.target.value
}),
placeholder: "email",
type: "email",
style: inputStyle,
"x-file-name": "App",
"x-line-number": "234",
"x-column": "10",
"x-component": "input",
"x-id": "App_234_10",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 234,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("textarea", {
"data-testid": "contact-message",
value: form.message,
onChange: e => setForm({
...form,
message: e.target.value
}),
placeholder: "what's up?",
rows: 4,
style: {
...inputStyle,
resize: "vertical"
},
"x-file-name": "App",
"x-line-number": "242",
"x-column": "10",
"x-component": "textarea",
"x-id": "App_242_10",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 242,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("button", {
type: "submit",
"data-testid": "contact-send",
disabled: status === "sending",
className: "clickable",
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 9,
padding: "8px 12px",
background: status === "ok" ? "#7bd389" : "#c9a7ff",
border: "2px solid #000",
color: "#231a2e",
boxShadow: "3px 3px 0 #000",
cursor: status === "sending" ? "wait" : "pointer"
},
"x-file-name": "App",
"x-line-number": "250",
"x-column": "10",
"x-component": "button",
"x-id": "App_250_10",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: status === "sending" ? "sending..." : status === "ok" ? "sent! ♥" : "send →"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 250,
columnNumber: 11
}, this), status === "err" && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "contact-error",
style: {
color: "#c22",
fontSize: 14
},
"x-file-name": "App",
"x-line-number": "269",
"x-column": "12",
"x-component": "div",
"x-id": "App_269_12",
"x-dynamic": "true",
"x-source-type": "state",
"x-source-var": "errMsg",
"x-source-editable": "false",
children: errMsg
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 269,
columnNumber: 13
}, this), status === "ok" && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "contact-success",
style: {
color: "#2a7a3f",
fontSize: 14
},
"x-file-name": "App",
"x-line-number": "274",
"x-column": "12",
"x-component": "div",
"x-id": "App_274_12",
"x-dynamic": "false",
children: "got it! I'll get back to you soon."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 274,
columnNumber: 13
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 226,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 209,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginTop: 20,
fontSize: 14,
color: "#7c5b00"
},
"x-file-name": "App",
"x-line-number": "281",
"x-column": "6",
"x-component": "p",
"x-id": "App_281_6",
"x-dynamic": "false",
children: "Response time: usually within a caffeinated afternoon."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 281,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 195,
columnNumber: 5
}, this);
}
_s(ContactWindow, "md8GP+2UM0Cw8RE5wlcATsKGz/c=");
_c4 = ContactWindow;
const inputStyle = {
fontFamily: "'VT323', monospace",
fontSize: 18,
padding: "6px 8px",
border: "2px solid #000",
background: "#fff",
color: "#231a2e",
outline: "none"
};
function ContactLink({
label,
value,
href,
testId
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("a", {
href: href,
target: "_blank",
rel: "noreferrer",
className: "clickable",
"data-testid": testId,
style: {
display: "flex",
alignItems: "center",
gap: 10,
border: "2px solid #000",
padding: "8px 10px",
background: "#fff",
textDecoration: "none",
color: "#231a2e",
boxShadow: "3px 3px 0 #000"
},
"x-file-name": "App",
"x-line-number": "300",
"x-column": "4",
"x-component": "a",
"x-id": "App_300_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 8,
background: "#ffd166",
border: "2px solid #000",
padding: "3px 5px"
},
"x-file-name": "App",
"x-line-number": "313",
"x-column": "6",
"x-component": "span",
"x-id": "App_313_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "label",
"x-source-editable": "false",
children: label
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 313,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
"x-file-name": "App",
"x-line-number": "322",
"x-column": "6",
"x-component": "span",
"x-id": "App_322_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "value",
"x-source-editable": "false",
children: value
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 322,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 300,
columnNumber: 5
}, this);
}
_c5 = ContactLink;
function ResumeWindow() {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "content-resume",
"x-file-name": "App",
"x-line-number": "329",
"x-column": "4",
"x-component": "div",
"x-id": "App_329_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
display: "flex",
justifyContent: "space-between",
alignItems: "center",
gap: 10,
marginBottom: 12,
flexWrap: "wrap"
},
"x-file-name": "App",
"x-line-number": "330",
"x-column": "6",
"x-component": "div",
"x-id": "App_330_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h2", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 12,
margin: 0
},
"x-file-name": "App",
"x-line-number": "331",
"x-column": "8",
"x-component": "h2",
"x-id": "App_331_8",
"x-dynamic": "false",
children: "r\xE9sum\xE9.txt"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 331,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("a", {
href: RESUME_URL,
target: "_blank",
rel: "noreferrer",
download: "Preksha_Krishnan_Resume.pdf",
className: "clickable",
"data-testid": "resume-download",
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 8,
padding: "6px 8px",
background: "#ffd166",
border: "2px solid #000",
color: "#231a2e",
textDecoration: "none",
boxShadow: "3px 3px 0 #000",
whiteSpace: "nowrap"
},
"x-file-name": "App",
"x-line-number": "334",
"x-column": "8",
"x-component": "a",
"x-id": "App_334_8",
"x-dynamic": "false",
children: "\u2193 .pdf"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 334,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 330,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(Section, {
title: "EDUCATION",
"x-file-name": "App",
"x-line-number": "357",
"x-column": "6",
"x-component": "Section",
"x-id": "App_357_6",
"x-dynamic": "true",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "358",
"x-column": "8",
"x-component": "p",
"x-id": "App_358_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "358",
"x-column": "11",
"x-component": "b",
"x-id": "App_358_11",
"x-dynamic": "false",
children: "BBA"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 358,
columnNumber: 12
}, this), " \u2014 Symbiosis Centre for Management Studies, Hyderabad \xB7 2023\u20132026"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 358,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "359",
"x-column": "8",
"x-component": "p",
"x-id": "App_359_8",
"x-dynamic": "false",
children: "CBSE (PCM) \u2014 Glendale Academy Intl. \xB7 2023"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 359,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 357,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(Section, {
title: "EXPERIENCE",
"x-file-name": "App",
"x-line-number": "362",
"x-column": "6",
"x-component": "Section",
"x-id": "App_362_6",
"x-dynamic": "true",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "363",
"x-column": "8",
"x-component": "p",
"x-id": "App_363_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "363",
"x-column": "11",
"x-component": "b",
"x-id": "App_363_11",
"x-dynamic": "false",
children: "Social Media Lead \u2014 Restaurant Client"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 363,
columnNumber: 12
}, this), " \xB7 Jul 2025\u2013Present"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 363,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginLeft: 10
},
"x-file-name": "App",
"x-line-number": "364",
"x-column": "8",
"x-component": "p",
"x-id": "App_364_8",
"x-dynamic": "false",
children: "Scaled 5K \u2192 2M+ monthly views in 2 weeks. +50% followers, reservation lift."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 364,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "366",
"x-column": "8",
"x-component": "p",
"x-id": "App_366_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "366",
"x-column": "11",
"x-component": "b",
"x-id": "App_366_11",
"x-dynamic": "false",
children: "Content Creator \u2014 LinkedIn (personal brand)"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 366,
columnNumber: 12
}, this), " \xB7 Jan 2026\u2013Present"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 366,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginLeft: 10
},
"x-file-name": "App",
"x-line-number": "367",
"x-column": "8",
"x-component": "p",
"x-id": "App_367_8",
"x-dynamic": "false",
children: "1M+ impressions. Sponsored campaigns with Mars, Inc. & Colors Queen."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 367,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "369",
"x-column": "8",
"x-component": "p",
"x-id": "App_369_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "369",
"x-column": "11",
"x-component": "b",
"x-id": "App_369_11",
"x-dynamic": "false",
children: "Founder \u2014 @sinofgluttire (Instagram)"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 369,
columnNumber: 12
}, this), " \xB7 Jan 2024\u2013Present"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 369,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginLeft: 10
},
"x-file-name": "App",
"x-line-number": "370",
"x-column": "8",
"x-component": "p",
"x-id": "App_370_8",
"x-dynamic": "false",
children: "Lifestyle & F&B media. 7M+ monthly organic impressions."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 370,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "372",
"x-column": "8",
"x-component": "p",
"x-id": "App_372_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "372",
"x-column": "11",
"x-component": "b",
"x-id": "App_372_11",
"x-dynamic": "false",
children: "Social Media & Content Intern \u2014 Titan Company Ltd."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 372,
columnNumber: 12
}, this), " \xB7 May 2025\u2013Jun 2025"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 372,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginLeft: 10
},
"x-file-name": "App",
"x-line-number": "373",
"x-column": "8",
"x-component": "p",
"x-id": "App_373_8",
"x-dynamic": "false",
children: "20+ reels/stories. +25% engagement on employer branding content."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 373,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "375",
"x-column": "8",
"x-component": "p",
"x-id": "App_375_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("b", {
"x-file-name": "App",
"x-line-number": "375",
"x-column": "11",
"x-component": "b",
"x-id": "App_375_11",
"x-dynamic": "false",
children: "Marketing & Content Intern \u2014 Hinduja Global Solutions"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 375,
columnNumber: 12
}, this), " \xB7 May 2024\u2013Jun 2024"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 375,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 362,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(Section, {
title: "SKILLS",
"x-file-name": "App",
"x-line-number": "378",
"x-column": "6",
"x-component": "Section",
"x-id": "App_378_6",
"x-dynamic": "true",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
"x-file-name": "App",
"x-line-number": "379",
"x-column": "8",
"x-component": "p",
"x-id": "App_379_8",
"x-dynamic": "false",
children: "Social strategy \xB7 Reels \xB7 TikTok \xB7 CapCut \xB7 Canva \xB7 Analytics \xB7 Creator ops \xB7 Community"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 379,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 378,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 329,
columnNumber: 5
}, this);
}
_c6 = ResumeWindow;
function Section({
title,
children
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
marginBottom: 14
},
"x-file-name": "App",
"x-line-number": "387",
"x-column": "4",
"x-component": "div",
"x-id": "App_387_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 9,
background: "#c9a7ff",
border: "2px solid #000",
padding: "4px 6px",
display: "inline-block",
marginBottom: 6
},
"x-file-name": "App",
"x-line-number": "388",
"x-column": "6",
"x-component": "div",
"x-id": "App_388_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "title",
"x-source-editable": "false",
children: title
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 388,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"x-file-name": "App",
"x-line-number": "398",
"x-column": "6",
"x-component": "div",
"x-id": "App_398_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "children",
"x-source-editable": "false",
children: children
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 398,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 387,
columnNumber: 5
}, this);
}
_c7 = Section;
function RejectedWindow() {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"data-testid": "content-rejected",
"x-file-name": "App",
"x-line-number": "405",
"x-column": "4",
"x-component": "div",
"x-id": "App_405_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("h2", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 12,
margin: "0 0 12px"
},
"x-file-name": "App",
"x-line-number": "406",
"x-column": "6",
"x-component": "h2",
"x-id": "App_406_6",
"x-dynamic": "false",
children: "\uD83D\uDDD1 rejected concepts"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 406,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
color: "#7c5b00",
marginTop: 0
},
"x-file-name": "App",
"x-line-number": "409",
"x-column": "6",
"x-component": "p",
"x-id": "App_409_6",
"x-dynamic": "false",
children: "A little archive of ideas that did not make it. Every good portfolio needs a graveyard."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 409,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
display: "flex",
flexDirection: "column",
gap: 10,
marginTop: 14
},
"x-file-name": "App",
"x-line-number": "412",
"x-column": "6",
"x-component": "div",
"x-id": "App_412_6",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.REJECTED.map(r => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
border: "2px dashed #000",
padding: 10,
background: "#fff5f7"
},
"x-file-name": "App",
"x-line-number": "414",
"x-column": "10",
"x-component": "div",
"x-id": "App_414_10",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 9,
marginBottom: 4
},
"x-file-name": "App",
"x-line-number": "422",
"x-column": "12",
"x-component": "div",
"x-id": "App_422_12",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "REJECTED",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "63",
"x-source-path": "title",
"x-source-editable": "true",
"x-array-var": "REJECTED",
"x-array-file": "@/data/portfolio",
"x-array-line": "63",
"x-array-item-param": "r",
children: ["\u2717 ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("span", {
"data-ve-dynamic": "true",
"x-excluded": "true",
style: {
display: "contents"
},
"x-file-name": "App",
"x-line-number": "422",
"x-column": "12",
"x-component": "div",
"x-id": "App_422_12_expr1",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "REJECTED",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "63",
"x-source-path": "title",
"x-source-editable": "true",
"x-array-var": "REJECTED",
"x-array-file": "@/data/portfolio",
"x-array-line": "63",
"x-array-item-param": "r",
children: r.title
}, void 0, false)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 422,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
"x-file-name": "App",
"x-line-number": "425",
"x-column": "12",
"x-component": "div",
"x-id": "App_425_12",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "REJECTED",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "63",
"x-source-path": "note",
"x-source-editable": "true",
"x-array-var": "REJECTED",
"x-array-file": "@/data/portfolio",
"x-array-line": "63",
"x-array-item-param": "r",
children: r.note
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 425,
columnNumber: 13
}, this)]
}, r.id, true, {
fileName: _jsxFileName,
lineNumber: 414,
columnNumber: 11
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 412,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("p", {
style: {
marginTop: 18,
fontSize: 14,
color: "#7c5b00"
},
"x-file-name": "App",
"x-line-number": "429",
"x-column": "6",
"x-component": "p",
"x-id": "App_429_6",
"x-dynamic": "false",
children: "Moral: ship the bad ideas first, the good ones show up later."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 429,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 405,
columnNumber: 5
}, this);
}
// ---------- Main App ----------
_c8 = RejectedWindow;
function App() {
_s2();
const [booted, setBooted] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
const [openWindows, setOpenWindows] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
const [zTop, setZTop] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(30);
const [muted, setMutedState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
const projects = _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.PROJECTS;
const dockItems = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => [{
id: "about",
label: "About",
icon: "user"
}, ...projects.map(p => ({
id: p.id,
label: p.title,
icon: p.icon
})), {
id: "resume",
label: "Résumé",
icon: "doc"
}, {
id: "contact",
label: "Contact",
icon: "mail"
}, {
id: "rejected",
label: "Rejected",
icon: "trash"
}], [projects]);
const focus = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(id => {
setOpenWindows(ws => {
const nextZ = zTop + 1;
setZTop(nextZ);
return ws.map(w => w.id === id ? {
...w,
z: nextZ,
focused: true
} : {
...w,
focused: false
});
});
}, [zTop]);
const openWindow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(id => {
_utils_sounds__WEBPACK_IMPORTED_MODULE_4__.sfx.open();
setOpenWindows(ws => {
const existing = ws.find(w => w.id === id);
const nextZ = zTop + 1;
setZTop(nextZ);
if (existing) {
return ws.map(w => w.id === id ? {
...w,
z: nextZ,
focused: true
} : {
...w,
focused: false
});
}
// pick a spawn position that cascades
const count = ws.length;
const spawnX = 120 + count % 5 * 40;
const spawnY = 70 + count % 5 * 30;
return [...ws.map(w => ({
...w,
focused: false
})), {
id,
x: spawnX,
y: spawnY,
z: nextZ,
focused: true
}];
});
}, [zTop]);
const closeWindow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(id => {
setOpenWindows(ws => ws.filter(w => w.id !== id));
}, []);
const renderWindowContent = id => {
if (id === "about") return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(AboutWindow, {
"x-file-name": "App",
"x-line-number": "493",
"x-column": "31",
"x-component": "AboutWindow",
"x-id": "App_493_31",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 493,
columnNumber: 32
}, this);
if (id === "contact") return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ContactWindow, {
"x-file-name": "App",
"x-line-number": "494",
"x-column": "33",
"x-component": "ContactWindow",
"x-id": "App_494_33",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 494,
columnNumber: 34
}, this);
if (id === "resume") return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ResumeWindow, {
"x-file-name": "App",
"x-line-number": "495",
"x-column": "32",
"x-component": "ResumeWindow",
"x-id": "App_495_32",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 495,
columnNumber: 33
}, this);
if (id === "rejected") return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(RejectedWindow, {
"x-file-name": "App",
"x-line-number": "496",
"x-column": "34",
"x-component": "RejectedWindow",
"x-id": "App_496_34",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 496,
columnNumber: 35
}, this);
const p = projects.find(x => x.id === id);
if (p) return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(ProjectWindow, {
project: p,
"x-file-name": "App",
"x-line-number": "498",
"x-column": "18",
"x-component": "ProjectWindow",
"x-id": "App_498_18",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 498,
columnNumber: 19
}, this);
return null;
};
const titleFor = id => {
if (id === "about") return `about — ${_data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.name.toLowerCase()}.md`;
if (id === "contact") return "contact.txt";
if (id === "resume") return "resume.pdf";
if (id === "rejected") return "trash://rejected-concepts";
const p = projects.find(x => x.id === id);
return p ? `~/projects/${p.id}` : id;
};
if (!booted) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_BootScreen__WEBPACK_IMPORTED_MODULE_5__["default"], {
onDone: () => setBooted(true),
"x-file-name": "App",
"x-line-number": "512",
"x-column": "11",
"x-component": "BootScreen",
"x-id": "App_512_11",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 512,
columnNumber: 12
}, this);
}
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
className: "App pixel-sky",
"data-testid": "desktop-root",
"x-file-name": "App",
"x-line-number": "516",
"x-column": "4",
"x-component": "div",
"x-id": "App_516_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_MenuBar__WEBPACK_IMPORTED_MODULE_6__["default"], {
name: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.name,
onOpenAbout: () => openWindow("about"),
"x-file-name": "App",
"x-line-number": "517",
"x-column": "6",
"x-component": "MenuBar",
"x-id": "App_517_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 517,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_Clouds__WEBPACK_IMPORTED_MODULE_7__["default"], {
"x-file-name": "App",
"x-line-number": "518",
"x-column": "6",
"x-component": "Clouds",
"x-id": "App_518_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 518,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_StickyNote__WEBPACK_IMPORTED_MODULE_8__["default"], {
tagline: _data_portfolio__WEBPACK_IMPORTED_MODULE_3__.OWNER.tagline,
"x-file-name": "App",
"x-line-number": "519",
"x-column": "6",
"x-component": "StickyNote",
"x-id": "App_519_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 519,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
className: "icon-grid",
"data-testid": "icon-grid",
"x-file-name": "App",
"x-line-number": "522",
"x-column": "6",
"x-component": "div",
"x-id": "App_522_6",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: projects.map(p => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_DesktopIcon__WEBPACK_IMPORTED_MODULE_10__["default"], {
kind: p.icon,
label: p.title,
onOpen: () => openWindow(p.id),
testId: `icon-${p.id}`,
"x-file-name": "App",
"x-line-number": "524",
"x-column": "10",
"x-component": "DesktopIcon",
"x-id": "App_524_10",
"x-dynamic": "true",
"x-source-type": "external",
"x-source-var": "projects",
"x-source-editable": "false",
"x-array-var": "projects",
"x-array-item-param": "p"
}, p.id, false, {
fileName: _jsxFileName,
lineNumber: 524,
columnNumber: 11
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 522,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
className: "trashcan",
"x-file-name": "App",
"x-line-number": "535",
"x-column": "6",
"x-component": "div",
"x-id": "App_535_6",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_TrashCan__WEBPACK_IMPORTED_MODULE_13__["default"], {
onOpen: () => openWindow("rejected"),
"x-file-name": "App",
"x-line-number": "536",
"x-column": "8",
"x-component": "TrashCan",
"x-id": "App_536_8",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 536,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 535,
columnNumber: 7
}, this), openWindows.map(w => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_Window__WEBPACK_IMPORTED_MODULE_11__["default"], {
id: w.id,
title: titleFor(w.id),
x: w.x,
y: w.y,
zIndex: w.z,
focused: w.focused,
onFocus: focus,
onClose: closeWindow,
"x-file-name": "App",
"x-line-number": "541",
"x-column": "8",
"x-component": "Window",
"x-id": "App_541_8",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: renderWindowContent(w.id)
}, w.id, false, {
fileName: _jsxFileName,
lineNumber: 541,
columnNumber: 9
}, this)), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_PixelGirl__WEBPACK_IMPORTED_MODULE_9__["default"], {
"x-file-name": "App",
"x-line-number": "557",
"x-column": "6",
"x-component": "PixelGirl",
"x-id": "App_557_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 557,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_components_desktop_Dock__WEBPACK_IMPORTED_MODULE_12__["default"], {
items: dockItems,
onOpen: openWindow,
muted: muted,
onToggleMute: () => setMutedState((0,_utils_sounds__WEBPACK_IMPORTED_MODULE_4__.isMuted)()),
"x-file-name": "App",
"x-line-number": "560",
"x-column": "6",
"x-component": "Dock",
"x-id": "App_560_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 560,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 516,
columnNumber: 5
}, this);
}
_s2(App, "SQ1lGRhmCS1MoG6RywrNodk0Ho8=");
_c9 = App;
var _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9;
__webpack_require__.$Refresh$.register(_c, "ProjectWindow");
__webpack_require__.$Refresh$.register(_c2, "AboutWindow");
__webpack_require__.$Refresh$.register(_c3, "PixelPortrait");
__webpack_require__.$Refresh$.register(_c4, "ContactWindow");
__webpack_require__.$Refresh$.register(_c5, "ContactLink");
__webpack_require__.$Refresh$.register(_c6, "ResumeWindow");
__webpack_require__.$Refresh$.register(_c7, "Section");
__webpack_require__.$Refresh$.register(_c8, "RejectedWindow");
__webpack_require__.$Refresh$.register(_c9, "App");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/BootScreen.jsx"
/*!***********************************************!*\
!*** ./src/components/desktop/BootScreen.jsx ***!
\***********************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ BootScreen)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/BootScreen.jsx",
_s = __webpack_require__.$Refresh$.signature();
// A quick pixel-art boot sequence with SYSTEM POST lines and a progress bar.
function BootScreen({
onDone
}) {
_s();
const [line, setLine] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
const [progress, setProgress] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
const lines = ["PREKSHA OS v3.14 — pixel-perfect", "Loading pastel palette.....OK", "Mounting /dev/heart.........OK", "Fetching creative directory.OK", "Warming coffee module ......OK", "Boot complete. Say hi!"];
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
_utils_sounds__WEBPACK_IMPORTED_MODULE_1__.sfx.boot();
let t = 0;
const interval = setInterval(() => {
t += 1;
setLine(l => Math.min(l + 1, lines.length));
if (t >= lines.length) clearInterval(interval);
}, 320);
return () => clearInterval(interval);
}, []);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const iv = setInterval(() => {
setProgress(p => {
const next = p + 4 + Math.random() * 6;
if (next >= 100) {
clearInterval(iv);
setTimeout(onDone, 450);
return 100;
}
return next;
});
}, 90);
return () => clearInterval(iv);
}, [onDone]);
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "boot",
"data-testid": "boot-screen",
"x-file-name": "BootScreen",
"x-line-number": "45",
"x-column": "4",
"x-component": "div",
"x-id": "BootScreen_45_4",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "boot-inner",
"x-file-name": "BootScreen",
"x-line-number": "46",
"x-column": "6",
"x-component": "div",
"x-id": "BootScreen_46_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
fontSize: 22,
marginBottom: 24,
letterSpacing: 2
},
className: "flicker",
"x-file-name": "BootScreen",
"x-line-number": "47",
"x-column": "8",
"x-component": "div",
"x-id": "BootScreen_47_8",
"x-dynamic": "true",
"x-source-type": "unknown",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
color: "#ffd6e7"
},
"x-file-name": "BootScreen",
"x-line-number": "48",
"x-column": "10",
"x-component": "span",
"x-id": "BootScreen_48_10",
"x-dynamic": "false",
children: "\u25B2"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 48,
columnNumber: 11
}, this), " ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
color: "#ffe8d0"
},
"x-file-name": "BootScreen",
"x-line-number": "49",
"x-column": "10",
"x-component": "span",
"x-id": "BootScreen_49_10",
"x-dynamic": "false",
children: "PREKSHA"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 49,
columnNumber: 11
}, this), " ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
color: "#d9c7ff"
},
"x-file-name": "BootScreen",
"x-line-number": "50",
"x-column": "10",
"x-component": "span",
"x-id": "BootScreen_50_10",
"x-dynamic": "false",
children: "OS"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 50,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 47,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
textAlign: "left",
fontSize: 9,
lineHeight: 1.9,
color: "#ffe8d0",
minWidth: 320
},
"x-file-name": "BootScreen",
"x-line-number": "53",
"x-column": "8",
"x-component": "div",
"x-id": "BootScreen_53_8",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [lines.slice(0, line).map((l, i) => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
"x-file-name": "BootScreen",
"x-line-number": "55",
"x-column": "12",
"x-component": "div",
"x-id": "BootScreen_55_12",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-editable": "false",
"x-array-item-param": "l",
children: ["> ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
"data-ve-dynamic": "true",
"x-excluded": "true",
style: {
display: "contents"
},
"x-file-name": "BootScreen",
"x-line-number": "55",
"x-column": "12",
"x-component": "div",
"x-id": "BootScreen_55_12_expr1",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-editable": "false",
"x-array-item-param": "l",
children: l
}, void 0, false)]
}, i, true, {
fileName: _jsxFileName,
lineNumber: 55,
columnNumber: 13
}, this)), line < lines.length && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "blink",
"x-file-name": "BootScreen",
"x-line-number": "57",
"x-column": "34",
"x-component": "div",
"x-id": "BootScreen_57_34",
"x-dynamic": "false",
children: "> _"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 57,
columnNumber: 35
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 53,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
marginTop: 30,
width: 320
},
"x-file-name": "BootScreen",
"x-line-number": "60",
"x-column": "8",
"x-component": "div",
"x-id": "BootScreen_60_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
border: "2px solid #ffd6e7",
padding: 2,
height: 16
},
"x-file-name": "BootScreen",
"x-line-number": "61",
"x-column": "10",
"x-component": "div",
"x-id": "BootScreen_61_10",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
width: `${progress}%`,
height: "100%",
background: "linear-gradient(90deg,#ffd6e7,#d9c7ff)",
transition: "width .08s steps(3)"
},
"x-file-name": "BootScreen",
"x-line-number": "62",
"x-column": "12",
"x-component": "div",
"x-id": "BootScreen_62_12",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 62,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 61,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
style: {
fontSize: 8,
marginTop: 8,
color: "#ffd6e7"
},
"x-file-name": "BootScreen",
"x-line-number": "71",
"x-column": "10",
"x-component": "div",
"x-id": "BootScreen_71_10",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
"data-ve-dynamic": "true",
"x-excluded": "true",
style: {
display: "contents"
},
"x-file-name": "BootScreen",
"x-line-number": "71",
"x-column": "10",
"x-component": "div",
"x-id": "BootScreen_71_10_expr1",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: Math.floor(progress)
}, void 0, false), "%"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 71,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 60,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 46,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 45,
columnNumber: 5
}, this);
}
_s(BootScreen, "DqwvplF+4MjOouOH9WSEakx+rtM=");
_c = BootScreen;
var _c;
__webpack_require__.$Refresh$.register(_c, "BootScreen");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/Clouds.jsx"
/*!*******************************************!*\
!*** ./src/components/desktop/Clouds.jsx ***!
\*******************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Clouds)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/Clouds.jsx";
// A single pixel cloud (SVG) — soft, chunky pastel puff
function Cloud({
scale = 1,
opacity = 1
}) {
const s = scale;
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("svg", {
width: 80 * s,
height: 36 * s,
viewBox: "0 0 40 18",
className: "pixelated",
style: {
opacity
},
"x-file-name": "Clouds",
"x-line-number": "7",
"x-column": "4",
"x-component": "svg",
"x-id": "Clouds_7_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "6",
y: "10",
width: "28",
height: "4",
fill: "#fff",
"x-file-name": "Clouds",
"x-line-number": "15",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_15_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 15,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "4",
y: "8",
width: "32",
height: "4",
fill: "#fff",
"x-file-name": "Clouds",
"x-line-number": "16",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_16_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 16,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "8",
y: "6",
width: "8",
height: "3",
fill: "#fff",
"x-file-name": "Clouds",
"x-line-number": "17",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_17_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 17,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "20",
y: "4",
width: "10",
height: "4",
fill: "#fff",
"x-file-name": "Clouds",
"x-line-number": "18",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_18_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 18,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "12",
y: "4",
width: "6",
height: "2",
fill: "#fff",
"x-file-name": "Clouds",
"x-line-number": "19",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_19_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 19,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "6",
y: "13",
width: "28",
height: "2",
fill: "#f5c3d4",
"x-file-name": "Clouds",
"x-line-number": "21",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_21_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 21,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: "8",
y: "14",
width: "24",
height: "1",
fill: "#e8a9c0",
"x-file-name": "Clouds",
"x-line-number": "22",
"x-column": "6",
"x-component": "rect",
"x-id": "Clouds_22_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 22,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 7,
columnNumber: 5
}, this);
}
_c = Cloud;
function Clouds() {
const clouds = [{
top: 50,
delay: 0,
dur: 90,
scale: 1.1,
op: 0.9
}, {
top: 120,
delay: 12,
dur: 130,
scale: 0.7,
op: 0.7
}, {
top: 200,
delay: 30,
dur: 110,
scale: 1.4,
op: 0.85
}, {
top: 90,
delay: 60,
dur: 160,
scale: 0.9,
op: 0.8
}, {
top: 260,
delay: 45,
dur: 140,
scale: 1.0,
op: 0.75
}];
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
position: "absolute",
inset: 0,
pointerEvents: "none",
overflow: "hidden"
},
"aria-hidden": true,
"data-testid": "clouds-layer",
"x-file-name": "Clouds",
"x-line-number": "36",
"x-column": "4",
"x-component": "div",
"x-id": "Clouds_36_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: clouds.map((c, i) => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
position: "absolute",
top: c.top,
left: 0,
animation: `drift ${c.dur}s linear ${-c.delay}s infinite`
},
"x-file-name": "Clouds",
"x-line-number": "38",
"x-column": "8",
"x-component": "div",
"x-id": "Clouds_38_8",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)(Cloud, {
scale: c.scale,
opacity: c.op,
"x-file-name": "Clouds",
"x-line-number": "47",
"x-column": "10",
"x-component": "Cloud",
"x-id": "Clouds_47_10",
"x-dynamic": "true",
"x-source-type": "static-imported",
"x-source-var": "clouds",
"x-source-file-abs": "/app/frontend/src/components/desktop/Clouds.jsx",
"x-source-line": "28",
"x-source-editable": "true",
"x-array-var": "clouds",
"x-array-line": "28",
"x-array-item-param": "c"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 47,
columnNumber: 11
}, this)
}, i, false, {
fileName: _jsxFileName,
lineNumber: 38,
columnNumber: 9
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 36,
columnNumber: 5
}, this);
}
_c2 = Clouds;
var _c, _c2;
__webpack_require__.$Refresh$.register(_c, "Cloud");
__webpack_require__.$Refresh$.register(_c2, "Clouds");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/DesktopIcon.jsx"
/*!************************************************!*\
!*** ./src/components/desktop/DesktopIcon.jsx ***!
\************************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ IconSprite: () => (/* binding */ IconSprite),
/* harmony export */ "default": () => (/* binding */ DesktopIcon)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/DesktopIcon.jsx";
/**
* Pixel-art icons for each project. Each icon is a small SVG sprite.
* Icon keys: camera, chart, film, chat, user, mail, doc, trash
*/
function IconSprite({
kind = "camera"
}) {
const px = (x, y, w, h, fill) => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("rect", {
x: x,
y: y,
width: w,
height: h,
fill: fill,
"x-file-name": "DesktopIcon",
"x-line-number": "9",
"x-column": "35",
"x-component": "rect",
"x-id": "DesktopIcon_9_35",
"x-dynamic": "false"
}, `${x},${y},${fill}`, false, {
fileName: _jsxFileName,
lineNumber: 9,
columnNumber: 36
}, this);
const O = "#231a2e"; // outline
const size = 16;
const sprites = {
// Instagram-camera style
camera: [px(1, 3, 14, 11, O), px(2, 4, 12, 9, "#ffd6e7"), px(4, 5, 8, 1, "#fff"), px(3, 6, 10, 7, "#f8a5c2"), px(6, 7, 4, 4, O), px(6, 7, 4, 4, "#fff"), px(7, 8, 2, 2, "#ff6faa"), px(11, 6, 2, 1, "#fff"), px(3, 2, 4, 1, O), px(3, 3, 4, 1, "#ffd6e7")],
// Bar chart growth
chart: [px(1, 2, 14, 13, O), px(2, 3, 12, 11, "#e6f7ff"), px(4, 10, 2, 4, "#7bd389"), px(7, 7, 2, 7, "#ffd166"), px(10, 4, 2, 10, "#ff6faa"), px(2, 14, 12, 1, O), px(3, 12, 1, 1, "#7bd389"),
// arrow up
px(11, 3, 1, 1, O), px(12, 4, 1, 1, O), px(10, 4, 1, 1, O)],
// Film clapperboard
film: [px(1, 3, 14, 11, O), px(2, 4, 12, 9, "#fff"), px(2, 4, 12, 2, O), px(3, 4, 1, 2, "#fff"), px(5, 4, 1, 2, "#fff"), px(7, 4, 1, 2, "#fff"), px(9, 4, 1, 2, "#fff"), px(11, 4, 1, 2, "#fff"), px(13, 4, 1, 2, "#fff"), px(4, 7, 2, 2, "#c9a7ff"), px(7, 7, 2, 2, "#ff8fb1"), px(10, 7, 2, 2, "#ffd166"), px(4, 10, 8, 1, O)],
// Chat bubble (LinkedIn / conversation)
chat: [px(1, 2, 14, 9, O), px(2, 3, 12, 7, "#bde0fe"), px(4, 5, 6, 1, O), px(4, 7, 8, 1, O), px(5, 11, 2, 2, O), px(4, 11, 1, 1, O), px(3, 12, 1, 1, "#bde0fe"), px(4, 12, 2, 1, "#bde0fe")],
// Trash bin
trash: [px(3, 3, 10, 1, O), px(6, 2, 4, 1, O), px(4, 4, 8, 11, O), px(5, 5, 6, 9, "#f8c5d1"), px(6, 6, 1, 7, O), px(9, 6, 1, 7, O), px(7, 7, 1, 5, "#fff")],
user: [px(6, 3, 4, 4, O), px(7, 4, 2, 2, "#ffd7b5"), px(6, 6, 4, 1, "#ffd7b5"), px(4, 9, 8, 5, O), px(5, 10, 6, 3, "#c9a7ff")],
mail: [px(1, 4, 14, 9, O), px(2, 5, 12, 7, "#fff"), px(2, 5, 12, 1, "#ff8fb1"), px(3, 6, 10, 1, "#ffb8d1"), px(2, 6, 6, 3, O), px(8, 6, 6, 3, O), px(3, 7, 4, 1, "#fff"), px(9, 7, 4, 1, "#fff")],
doc: [px(3, 1, 8, 14, O), px(4, 2, 6, 12, "#fff"), px(5, 4, 4, 1, "#8a8a8a"), px(5, 6, 4, 1, "#8a8a8a"), px(5, 8, 4, 1, "#8a8a8a"), px(5, 10, 3, 1, "#8a8a8a"), px(9, 1, 2, 3, "#ffd166")]
};
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("svg", {
width: "64",
height: "64",
viewBox: `0 0 ${size} ${size}`,
shapeRendering: "crispEdges",
className: "pixelated",
"x-file-name": "DesktopIcon",
"x-line-number": "107",
"x-column": "4",
"x-component": "svg",
"x-id": "DesktopIcon_107_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: sprites[kind] || sprites.doc
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 107,
columnNumber: 5
}, this);
}
_c = IconSprite;
function DesktopIcon({
kind,
label,
onOpen,
testId
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("button", {
type: "button",
className: "desktop-icon icon-pop clickable",
onClick: () => {
_utils_sounds__WEBPACK_IMPORTED_MODULE_1__.sfx.click();
onOpen();
},
onMouseEnter: () => _utils_sounds__WEBPACK_IMPORTED_MODULE_1__.sfx.hover(),
onDoubleClick: onOpen,
style: {
background: "transparent",
border: "none",
padding: 0
},
"data-testid": testId,
"x-file-name": "DesktopIcon",
"x-line-number": "115",
"x-column": "4",
"x-component": "button",
"x-id": "DesktopIcon_115_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(IconSprite, {
kind: kind,
"x-file-name": "DesktopIcon",
"x-line-number": "127",
"x-column": "6",
"x-component": "IconSprite",
"x-id": "DesktopIcon_127_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 127,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "label",
"x-file-name": "DesktopIcon",
"x-line-number": "128",
"x-column": "6",
"x-component": "div",
"x-id": "DesktopIcon_128_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "label",
"x-source-editable": "false",
children: label
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 128,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 115,
columnNumber: 5
}, this);
}
_c2 = DesktopIcon;
var _c, _c2;
__webpack_require__.$Refresh$.register(_c, "IconSprite");
__webpack_require__.$Refresh$.register(_c2, "DesktopIcon");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/Dock.jsx"
/*!*****************************************!*\
!*** ./src/components/desktop/Dock.jsx ***!
\*****************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Dock)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _DesktopIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DesktopIcon */ "./src/components/desktop/DesktopIcon.jsx");
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/Dock.jsx";
function Dock({
items,
onOpen,
muted,
onToggleMute
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
className: "dock",
"data-testid": "dock",
"x-file-name": "Dock",
"x-line-number": "7",
"x-column": "4",
"x-component": "div",
"x-id": "Dock_7_4",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [items.map(it => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("button", {
type: "button",
className: "dock-item clickable",
onClick: () => {
_utils_sounds__WEBPACK_IMPORTED_MODULE_2__.sfx.click();
onOpen(it.id);
},
onMouseEnter: () => _utils_sounds__WEBPACK_IMPORTED_MODULE_2__.sfx.hover(),
title: it.label,
style: {
width: 44,
height: 44,
border: "2px solid #000",
background: "#fff",
padding: 0,
display: "flex",
alignItems: "center",
justifyContent: "center"
},
"data-testid": `dock-${it.id}`,
"x-file-name": "Dock",
"x-line-number": "9",
"x-column": "8",
"x-component": "button",
"x-id": "Dock_9_8",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
style: {
transform: "scale(0.55)"
},
"x-file-name": "Dock",
"x-line-number": "28",
"x-column": "10",
"x-component": "div",
"x-id": "Dock_28_10",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_DesktopIcon__WEBPACK_IMPORTED_MODULE_1__.IconSprite, {
kind: it.icon,
"x-file-name": "Dock",
"x-line-number": "29",
"x-column": "12",
"x-component": "IconSprite",
"x-id": "Dock_29_12",
"x-dynamic": "true",
"x-source-type": "external",
"x-source-var": "items",
"x-source-editable": "false",
"x-array-var": "items",
"x-array-item-param": "it"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 29,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 28,
columnNumber: 11
}, this)
}, it.id, false, {
fileName: _jsxFileName,
lineNumber: 9,
columnNumber: 9
}, this)), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
style: {
width: 2,
background: "#000",
margin: "0 4px"
},
"x-file-name": "Dock",
"x-line-number": "34",
"x-column": "6",
"x-component": "div",
"x-id": "Dock_34_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 34,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("button", {
className: "dock-item clickable",
onClick: () => {
(0,_utils_sounds__WEBPACK_IMPORTED_MODULE_2__.setMuted)(!muted);
if (!muted) {
// going muted, no sound
} else {
_utils_sounds__WEBPACK_IMPORTED_MODULE_2__.sfx.click();
}
onToggleMute();
},
style: {
width: 44,
height: 44,
border: "2px solid #000",
background: muted ? "#f8c5d1" : "#c9a7ff",
fontFamily: "'Press Start 2P', monospace",
fontSize: 8
},
"data-testid": "dock-mute",
title: muted ? "Sound OFF" : "Sound ON",
"x-file-name": "Dock",
"x-line-number": "36",
"x-column": "6",
"x-component": "button",
"x-id": "Dock_36_6",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: muted ? "MUTE" : "SFX"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 36,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 7,
columnNumber: 5
}, this);
}
_c = Dock;
var _c;
__webpack_require__.$Refresh$.register(_c, "Dock");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/MenuBar.jsx"
/*!********************************************!*\
!*** ./src/components/desktop/MenuBar.jsx ***!
\********************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ MenuBar)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/MenuBar.jsx",
_s = __webpack_require__.$Refresh$.signature();
function MenuBar({
name,
onOpenAbout
}) {
_s();
const [time, setTime] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new Date());
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const t = setInterval(() => setTime(new Date()), 1000);
return () => clearInterval(t);
}, []);
const t = time;
const day = t.toLocaleDateString([], {
weekday: "short"
});
const date = t.toLocaleDateString([], {
month: "short",
day: "numeric"
});
const clock = t.toLocaleTimeString([], {
hour: "2-digit",
minute: "2-digit"
});
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
className: "menu-bar pixel-text-shadow",
"data-testid": "menu-bar",
"x-file-name": "MenuBar",
"x-line-number": "16",
"x-column": "4",
"x-component": "div",
"x-id": "MenuBar_16_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
display: "flex",
gap: 14,
alignItems: "center"
},
"x-file-name": "MenuBar",
"x-line-number": "17",
"x-column": "6",
"x-component": "div",
"x-id": "MenuBar_17_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("button", {
className: "clickable",
onClick: onOpenAbout,
"data-testid": "menu-brand",
style: {
background: "none",
border: "none",
font: "inherit",
padding: 0,
color: "#000"
},
"x-file-name": "MenuBar",
"x-line-number": "18",
"x-column": "8",
"x-component": "button",
"x-id": "MenuBar_18_8",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
style: {
marginRight: 6
},
"x-file-name": "MenuBar",
"x-line-number": "24",
"x-column": "10",
"x-component": "span",
"x-id": "MenuBar_24_10",
"x-dynamic": "false",
children: "\u2665"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 24,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("b", {
"x-file-name": "MenuBar",
"x-line-number": "25",
"x-column": "10",
"x-component": "b",
"x-id": "MenuBar_25_10",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "OWNER",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "2",
"x-source-path": "name",
"x-source-editable": "true",
children: name
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 25,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 18,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
style: {
opacity: 0.7
},
"x-file-name": "MenuBar",
"x-line-number": "27",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_27_8",
"x-dynamic": "false",
children: "File"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 27,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
style: {
opacity: 0.7
},
"x-file-name": "MenuBar",
"x-line-number": "28",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_28_8",
"x-dynamic": "false",
children: "View"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 28,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
style: {
opacity: 0.7
},
"x-file-name": "MenuBar",
"x-line-number": "29",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_29_8",
"x-dynamic": "false",
children: "Feelings"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 29,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
style: {
opacity: 0.7
},
"x-file-name": "MenuBar",
"x-line-number": "30",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_30_8",
"x-dynamic": "false",
children: "Help"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 30,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 17,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
display: "flex",
gap: 12,
alignItems: "center"
},
"data-testid": "menu-clock",
"x-file-name": "MenuBar",
"x-line-number": "32",
"x-column": "6",
"x-component": "div",
"x-id": "MenuBar_32_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
"x-file-name": "MenuBar",
"x-line-number": "33",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_33_8",
"x-dynamic": "false",
children: "\u25AE\u25AE\u25AE Wi-Fi"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 33,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
"x-file-name": "MenuBar",
"x-line-number": "34",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_34_8",
"x-dynamic": "false",
children: "\u266B"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 34,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
"x-file-name": "MenuBar",
"x-line-number": "35",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_35_8",
"x-dynamic": "true",
"x-source-type": "unknown",
"x-source-var": "day",
"x-source-editable": "false",
children: [day, " ", date]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 35,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
"x-file-name": "MenuBar",
"x-line-number": "36",
"x-column": "8",
"x-component": "span",
"x-id": "MenuBar_36_8",
"x-dynamic": "true",
"x-source-type": "unknown",
"x-source-var": "clock",
"x-source-editable": "false",
children: clock
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 36,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 32,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 16,
columnNumber: 5
}, this);
}
_s(MenuBar, "I0+7QaEsXHXB0XO5JypI3yBHjPI=");
_c = MenuBar;
var _c;
__webpack_require__.$Refresh$.register(_c, "MenuBar");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/PixelGirl.jsx"
/*!**********************************************!*\
!*** ./src/components/desktop/PixelGirl.jsx ***!
\**********************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ PixelGirl)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/PixelGirl.jsx";
/**
* A pixel-art girl standing above the dock.
* Chunky sprite with pink hair, pastel dress, a little wave.
* All hand-drawn in SVG so it stays crisp and lightweight.
*/
function PixelGirl() {
// palette
const skin = "#ffd7b5";
const hair = "#ff8fb1";
const hairDark = "#e56a92";
const dress = "#c9a7ff";
const dressDark = "#9c7dda";
const boot = "#5b3a86";
const outline = "#231a2e";
const white = "#fff";
const eye = "#231a2e";
const blush = "#ff9cbe";
const px = (x, y, w = 1, h = 1, fill = outline) => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("rect", {
x: x,
y: y,
width: w,
height: h,
fill: fill,
"x-file-name": "PixelGirl",
"x-line-number": "22",
"x-column": "4",
"x-component": "rect",
"x-id": "PixelGirl_22_4",
"x-dynamic": "false"
}, `${x}-${y}-${fill}`, false, {
fileName: _jsxFileName,
lineNumber: 22,
columnNumber: 5
}, this);
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
className: "pixel-girl bob pixelated",
"data-testid": "pixel-girl",
"x-file-name": "PixelGirl",
"x-line-number": "26",
"x-column": "4",
"x-component": "div",
"x-id": "PixelGirl_26_4",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("svg", {
width: "96",
height: "128",
viewBox: "0 0 24 32",
shapeRendering: "crispEdges",
"x-file-name": "PixelGirl",
"x-line-number": "27",
"x-column": "6",
"x-component": "svg",
"x-id": "PixelGirl_27_6",
"x-dynamic": "true",
"x-source-type": "computed",
"x-source-editable": "false",
children: [px(6, 3, 12, 1, outline), px(5, 4, 14, 1, outline), px(4, 5, 16, 5, outline), px(5, 5, 14, 4, hair), px(6, 4, 12, 1, hair), px(6, 9, 3, 3, hair), px(15, 9, 3, 3, hair), px(6, 12, 2, 2, hairDark), px(16, 12, 2, 2, hairDark), px(8, 7, 8, 6, skin), px(7, 6, 10, 2, hair), px(8, 8, 2, 1, hair), px(14, 8, 2, 1, hair), px(10, 10, 1, 1, eye), px(13, 10, 1, 1, eye), px(9, 11, 1, 1, blush), px(14, 11, 1, 1, blush), px(11, 12, 2, 1, "#c85a7a"), px(11, 13, 2, 1, skin), px(8, 14, 8, 6, dress), px(7, 15, 1, 5, dress), px(16, 15, 1, 5, dress), px(8, 19, 8, 1, dressDark), px(9, 15, 1, 1, white), px(10, 15, 1, 1, white), px(6, 20, 12, 3, dress), px(5, 21, 1, 2, dress), px(18, 21, 1, 2, dress), px(6, 22, 12, 1, dressDark), px(6, 14, 1, 5, skin), px(17, 14, 1, 5, skin), px(17, 13, 1, 1, skin), px(18, 12, 1, 1, skin), px(10, 23, 2, 4, skin), px(12, 23, 2, 4, skin), px(9, 27, 3, 2, boot), px(12, 27, 3, 2, boot), px(9, 29, 3, 1, outline), px(12, 29, 3, 1, outline), px(7, 14, 1, 1, outline), px(16, 14, 1, 1, outline), px(6, 20, 1, 1, outline), px(17, 20, 1, 1, outline)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 27,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 26,
columnNumber: 5
}, this);
}
_c = PixelGirl;
var _c;
__webpack_require__.$Refresh$.register(_c, "PixelGirl");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/StickyNote.jsx"
/*!***********************************************!*\
!*** ./src/components/desktop/StickyNote.jsx ***!
\***********************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ StickyNote)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/StickyNote.jsx";
function StickyNote({
tagline
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
className: "sticky-note sway",
"data-testid": "sticky-note",
"x-file-name": "StickyNote",
"x-line-number": "5",
"x-column": "4",
"x-component": "div",
"x-id": "StickyNote_5_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
className: "sticky-tape",
"x-file-name": "StickyNote",
"x-line-number": "6",
"x-column": "6",
"x-component": "div",
"x-id": "StickyNote_6_6",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 6,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 8,
marginBottom: 8,
color: "#7c5b00"
},
"x-file-name": "StickyNote",
"x-line-number": "7",
"x-column": "6",
"x-component": "div",
"x-id": "StickyNote_7_6",
"x-dynamic": "false",
children: "// note to self"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 7,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
whiteSpace: "pre-line"
},
"x-file-name": "StickyNote",
"x-line-number": "10",
"x-column": "6",
"x-component": "div",
"x-id": "StickyNote_10_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "OWNER",
"x-source-file": "@/data/portfolio",
"x-source-file-abs": "/app/frontend/src/data/portfolio.js",
"x-source-line": "2",
"x-source-path": "tagline",
"x-source-editable": "true",
children: tagline
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 10,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 6,
marginTop: 8,
color: "#7c5b00"
},
"x-file-name": "StickyNote",
"x-line-number": "11",
"x-column": "6",
"x-component": "div",
"x-id": "StickyNote_11_6",
"x-dynamic": "false",
children: "\u2014 P."
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 11,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 5,
columnNumber: 5
}, this);
}
_c = StickyNote;
var _c;
__webpack_require__.$Refresh$.register(_c, "StickyNote");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/TrashCan.jsx"
/*!*********************************************!*\
!*** ./src/components/desktop/TrashCan.jsx ***!
\*********************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ TrashCan)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _DesktopIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DesktopIcon */ "./src/components/desktop/DesktopIcon.jsx");
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/TrashCan.jsx";
function TrashCan({
onOpen
}) {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("button", {
type: "button",
className: "clickable",
onClick: () => {
_utils_sounds__WEBPACK_IMPORTED_MODULE_2__.sfx.trash();
onOpen();
},
onMouseEnter: () => _utils_sounds__WEBPACK_IMPORTED_MODULE_2__.sfx.hover(),
style: {
display: "flex",
flexDirection: "column",
alignItems: "center",
background: "transparent",
border: "none",
padding: 0,
gap: 4
},
"data-testid": "trash-can",
title: "Rejected Concepts",
"x-file-name": "TrashCan",
"x-line-number": "7",
"x-column": "4",
"x-component": "button",
"x-id": "TrashCan_7_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
style: {
transform: "scale(1.1)"
},
"x-file-name": "TrashCan",
"x-line-number": "22",
"x-column": "6",
"x-component": "div",
"x-id": "TrashCan_22_6",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_DesktopIcon__WEBPACK_IMPORTED_MODULE_1__.IconSprite, {
kind: "trash",
"x-file-name": "TrashCan",
"x-line-number": "23",
"x-column": "8",
"x-component": "IconSprite",
"x-id": "TrashCan_23_8",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 23,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 22,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
style: {
fontFamily: "'Press Start 2P', monospace",
fontSize: 6,
background: "rgba(255,255,255,0.65)",
padding: "3px 5px",
border: "1px solid #000",
color: "#1a1a1a"
},
"x-file-name": "TrashCan",
"x-line-number": "25",
"x-column": "6",
"x-component": "div",
"x-id": "TrashCan_25_6",
"x-dynamic": "false",
children: "REJECTED"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 25,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 7,
columnNumber: 5
}, this);
}
_c = TrashCan;
var _c;
__webpack_require__.$Refresh$.register(_c, "TrashCan");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/components/desktop/Window.jsx"
/*!*******************************************!*\
!*** ./src/components/desktop/Window.jsx ***!
\*******************************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Window)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_sounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/sounds */ "./src/utils/sounds.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/components/desktop/Window.jsx",
_s = __webpack_require__.$Refresh$.signature();
/**
* Draggable, stackable pixel-mac window. Supports mouse + touch.
*/
function Window({
id,
title,
x = 120,
y = 80,
w = 460,
zIndex = 20,
focused = false,
onFocus,
onClose,
children
}) {
_s();
const [pos, setPos] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
x,
y
});
const [minimised, setMinimised] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
const dragRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
const start = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({
x: 0,
y: 0,
px: 0,
py: 0,
dragging: false
});
const beginDrag = (clientX, clientY) => {
if (onFocus) onFocus(id);
start.current = {
x: clientX,
y: clientY,
px: pos.x,
py: pos.y,
dragging: true
};
};
const onMove = (clientX, clientY) => {
if (!start.current.dragging) return;
const dx = clientX - start.current.x;
const dy = clientY - start.current.y;
setPos({
x: Math.max(0, Math.min(window.innerWidth - 80, start.current.px + dx)),
y: Math.max(28, Math.min(window.innerHeight - 60, start.current.py + dy))
});
};
const endDrag = () => {
start.current.dragging = false;
};
const onMouseDown = e => {
beginDrag(e.clientX, e.clientY);
const mm = ev => onMove(ev.clientX, ev.clientY);
const mu = () => {
endDrag();
window.removeEventListener("mousemove", mm);
window.removeEventListener("mouseup", mu);
};
window.addEventListener("mousemove", mm);
window.addEventListener("mouseup", mu);
};
const onTouchStart = e => {
var _e$touches;
if (!((_e$touches = e.touches) !== null && _e$touches !== void 0 && _e$touches[0])) return;
beginDrag(e.touches[0].clientX, e.touches[0].clientY);
const tm = ev => {
var _ev$touches;
if (!((_ev$touches = ev.touches) !== null && _ev$touches !== void 0 && _ev$touches[0])) return;
onMove(ev.touches[0].clientX, ev.touches[0].clientY);
};
const te = () => {
endDrag();
window.removeEventListener("touchmove", tm);
window.removeEventListener("touchend", te);
window.removeEventListener("touchcancel", te);
};
window.addEventListener("touchmove", tm, {
passive: true
});
window.addEventListener("touchend", te);
window.addEventListener("touchcancel", te);
};
// On mount, if the initial x/y overflow small viewports, clamp them.
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const vw = window.innerWidth;
const vh = window.innerHeight;
setPos(p => ({
x: Math.max(4, Math.min(p.x, vw - 40)),
y: Math.max(30, Math.min(p.y, vh - 60))
}));
}, []);
const isMobile = typeof window !== "undefined" && window.innerWidth < 640;
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "pixel-window window-pop",
onMouseDown: () => onFocus && onFocus(id),
onTouchStart: () => onFocus && onFocus(id),
style: {
left: isMobile ? 8 : pos.x,
top: isMobile ? Math.min(pos.y, 40) : pos.y,
width: isMobile ? "calc(100vw - 16px)" : w,
maxWidth: isMobile ? "calc(100vw - 16px)" : undefined,
zIndex,
opacity: minimised ? 0 : 1,
pointerEvents: minimised ? "none" : "auto",
outline: focused ? "2px solid #000" : "none"
},
"data-testid": `window-${id}`,
"x-file-name": "Window",
"x-line-number": "86",
"x-column": "4",
"x-component": "div",
"x-id": "Window_86_4",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "titlebar",
ref: dragRef,
onMouseDown: onMouseDown,
onTouchStart: onTouchStart,
"x-file-name": "Window",
"x-line-number": "102",
"x-column": "6",
"x-component": "div",
"x-id": "Window_102_6",
"x-dynamic": "false",
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
className: "traffic close clickable",
onClick: e => {
e.stopPropagation();
_utils_sounds__WEBPACK_IMPORTED_MODULE_1__.sfx.close();
onClose && onClose(id);
},
"data-testid": `window-${id}-close`,
"x-file-name": "Window",
"x-line-number": "108",
"x-column": "8",
"x-component": "span",
"x-id": "Window_108_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 108,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
className: "traffic min clickable",
onClick: e => {
e.stopPropagation();
_utils_sounds__WEBPACK_IMPORTED_MODULE_1__.sfx.click();
setMinimised(true);
setTimeout(() => setMinimised(false), 350);
},
"x-file-name": "Window",
"x-line-number": "117",
"x-column": "8",
"x-component": "span",
"x-id": "Window_117_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 117,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
className: "traffic max",
"x-file-name": "Window",
"x-line-number": "126",
"x-column": "8",
"x-component": "span",
"x-id": "Window_126_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 126,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "title-text",
"x-file-name": "Window",
"x-line-number": "127",
"x-column": "8",
"x-component": "div",
"x-id": "Window_127_8",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "title",
"x-source-editable": "false",
children: title
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 127,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
width: 12
},
"x-file-name": "Window",
"x-line-number": "128",
"x-column": "8",
"x-component": "span",
"x-id": "Window_128_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 128,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
width: 12
},
"x-file-name": "Window",
"x-line-number": "129",
"x-column": "8",
"x-component": "span",
"x-id": "Window_129_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 129,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
style: {
width: 12
},
"x-file-name": "Window",
"x-line-number": "130",
"x-column": "8",
"x-component": "span",
"x-id": "Window_130_8",
"x-dynamic": "false"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 130,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 102,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
className: "window-body pixel-scroll",
"x-file-name": "Window",
"x-line-number": "133",
"x-column": "6",
"x-component": "div",
"x-id": "Window_133_6",
"x-dynamic": "true",
"x-source-type": "prop",
"x-source-var": "children",
"x-source-editable": "false",
children: children
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 133,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 86,
columnNumber: 5
}, this);
}
_s(Window, "9C7SYAq6+3sxG5S3RxOPgwahf70=");
_c = Window;
var _c;
__webpack_require__.$Refresh$.register(_c, "Window");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/data/portfolio.js"
/*!*******************************!*\
!*** ./src/data/portfolio.js ***!
\*******************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ OWNER: () => (/* binding */ OWNER),
/* harmony export */ PROJECTS: () => (/* binding */ PROJECTS),
/* harmony export */ REJECTED: () => (/* binding */ REJECTED)
/* harmony export */ });
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
// Portfolio content for Preksha Krishnan
const OWNER = {
name: "Preksha",
fullName: "Preksha Krishnan",
tagline: "designing tiny worlds,\none pixel at a time",
email: "preksha@sinofgluttire.com",
instagram: "https://sinofgluttire.com/",
linkedin: "https://www.linkedin.com/in/preksha-krishnan/",
location: "Hyderabad, India"
};
const PROJECTS = [{
id: "sinofgluttire",
title: "Sin of Gluttire",
icon: "camera",
description: "A lifestyle & food media platform I built from scratch. Trend-led reels, editorial storytelling and 7M+ monthly organic impressions across Instagram — the little corner of the internet where nightlife meets aesthetic.",
image: "https://images.unsplash.com/photo-1504674900247-0877df9cc836?w=900&q=70&auto=format",
link: "https://sinofgluttire.com/",
linkLabel: "@sinofgluttire on IG",
stack: ["Instagram", "Reels", "CapCut", "Community"]
}, {
id: "restaurant",
title: "5K to 2M in 14 Days",
icon: "chart",
description: "Led social strategy for a restaurant client and scaled the account from 5,000 to 2M+ monthly views in two weeks. Viral reels, targeted distribution, +50% followers, real reservation lift.",
image: "https://images.unsplash.com/photo-1552566626-52f8b828add9?w=900&q=70&auto=format",
link: null,
linkLabel: "Case study — coming soon",
stack: ["Reels", "Analytics", "Creator Ops"]
}, {
id: "titan",
title: "Titan — Life at Titan",
icon: "film",
description: "Interned with Titan Company. Directed 20+ reels and stories across CSR, DEI and employer branding, contributing to a 25% engagement lift on their internal brand content.",
image: "https://images.unsplash.com/photo-1533558527254-1289bcf8b129?w=900&q=70&auto=format",
link: null,
linkLabel: "Ask me about it",
stack: ["Brand", "Video", "Editorial"]
}, {
id: "linkedin",
title: "LinkedIn Studio",
icon: "chat",
description: "My personal LinkedIn brand. Essays on branding, consumer psychology & short-form culture. 1M+ impressions and sponsored collaborations with Mars, Incorporated and Colors Queen.",
image: "https://images.unsplash.com/photo-1611926653458-09294b3142bf?w=900&q=70&auto=format",
link: "https://www.linkedin.com/in/preksha-krishnan/",
linkLabel: "Follow on LinkedIn",
stack: ["Writing", "Personal Brand", "Analytics"]
}];
const REJECTED = [{
id: "r1",
title: "The Cursed Podcast",
note: "A podcast where I only interviewed inanimate objects. RIP."
}, {
id: "r2",
title: "NFT Cookbook",
note: "Recipes as JPEGs on a blockchain. It was 2021, forgive me."
}, {
id: "r3",
title: "Reels but Sepia",
note: "'Vintage-core' filter series. Aunties loved it. Algorithm did not."
}];
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/index.js"
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js");
/* harmony import */ var _tanstack_react_query__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @tanstack/react-query */ "./node_modules/@tanstack/query-core/build/modern/queryClient.js");
/* harmony import */ var _tanstack_react_query__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @tanstack/react-query */ "./node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js");
/* harmony import */ var _index_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/index.css */ "./src/index.css");
/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/App */ "./src/App.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/app/frontend/src/index.js";
const queryClient = new _tanstack_react_query__WEBPACK_IMPORTED_MODULE_2__.QueryClient({
defaultOptions: {
queries: {
staleTime: 60000,
refetchOnWindowFocus: false
}
}
});
const root = react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot(document.getElementById("root"));
root.render(/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)((react__WEBPACK_IMPORTED_MODULE_0___default().StrictMode), {
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(_tanstack_react_query__WEBPACK_IMPORTED_MODULE_3__.QueryClientProvider, {
client: queryClient,
"x-file-name": "index",
"x-line-number": "19",
"x-column": "4",
"x-component": "QueryClientProvider",
"x-id": "index_19_4",
"x-dynamic": "false",
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(_App__WEBPACK_IMPORTED_MODULE_5__["default"], {
"x-file-name": "index",
"x-line-number": "20",
"x-column": "6",
"x-component": "App",
"x-id": "index_20_6",
"x-dynamic": "true"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 20,
columnNumber: 7
}, undefined)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 19,
columnNumber: 5
}, undefined)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 18,
columnNumber: 3
}, undefined));
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./src/utils/sounds.js"
/*!*****************************!*\
!*** ./src/utils/sounds.js ***!
\*****************************/
(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ isMuted: () => (/* binding */ isMuted),
/* harmony export */ setMuted: () => (/* binding */ setMuted),
/* harmony export */ sfx: () => (/* binding */ sfx)
/* harmony export */ });
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
// Tiny 8-bit sound engine using Web Audio API.
// No external files. Each call creates a short tone or blip.
let _ctx = null;
function ctx() {
if (typeof window === "undefined") return null;
if (!_ctx) {
try {
_ctx = new (window.AudioContext || window.webkitAudioContext)();
} catch (e) {
return null;
}
}
if (_ctx.state === "suspended") _ctx.resume();
return _ctx;
}
function tone({
freq = 440,
type = "square",
duration = 0.08,
vol = 0.06,
slide = 0
}) {
const ac = ctx();
if (!ac) return;
const t0 = ac.currentTime;
const osc = ac.createOscillator();
const gain = ac.createGain();
osc.type = type;
osc.frequency.setValueAtTime(freq, t0);
if (slide) osc.frequency.exponentialRampToValueAtTime(Math.max(20, freq + slide), t0 + duration);
gain.gain.setValueAtTime(vol, t0);
gain.gain.exponentialRampToValueAtTime(0.0001, t0 + duration);
osc.connect(gain).connect(ac.destination);
osc.start(t0);
osc.stop(t0 + duration + 0.02);
}
let muted = false;
function setMuted(v) {
muted = !!v;
}
function isMuted() {
return muted;
}
const sfx = {
open() {
if (muted) return;
tone({
freq: 660,
duration: 0.06,
vol: 0.05
});
setTimeout(() => tone({
freq: 990,
duration: 0.08,
vol: 0.05
}), 55);
},
close() {
if (muted) return;
tone({
freq: 520,
duration: 0.06,
vol: 0.05
});
setTimeout(() => tone({
freq: 300,
duration: 0.09,
vol: 0.05,
slide: -100
}), 55);
},
click() {
if (muted) return;
tone({
freq: 880,
duration: 0.03,
vol: 0.04
});
},
hover() {
if (muted) return;
tone({
freq: 1200,
duration: 0.02,
vol: 0.02,
type: "triangle"
});
},
boot() {
if (muted) return;
const seq = [523, 659, 784, 1046];
seq.forEach((f, i) => setTimeout(() => tone({
freq: f,
duration: 0.11,
vol: 0.06
}), i * 130));
},
error() {
if (muted) return;
tone({
freq: 200,
duration: 0.18,
vol: 0.05,
type: "sawtooth",
slide: -80
});
},
trash() {
if (muted) return;
tone({
freq: 300,
duration: 0.05,
vol: 0.05,
type: "square"
});
setTimeout(() => tone({
freq: 180,
duration: 0.08,
vol: 0.05,
type: "square"
}), 40);
}
};
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ },
/***/ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js"
/*!***************************************************************************************!*\
!*** ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js ***!
\***************************************************************************************/
(module, __unused_webpack_exports, __webpack_require__) {
/* global __webpack_require__ */
var Refresh = __webpack_require__(/*! react-refresh/runtime */ "./node_modules/react-refresh/runtime.js");
/**
* Extracts exports from a webpack module object.
* @param {string} moduleId A Webpack module ID.
* @returns {*} An exports object from the module.
*/
function getModuleExports(moduleId) {
if (typeof moduleId === 'undefined') {
// `moduleId` is unavailable, which indicates that this module is not in the cache,
// which means we won't be able to capture any exports,
// and thus they cannot be refreshed safely.
// These are likely runtime or dynamically generated modules.
return {};
}
var maybeModule = __webpack_require__.c[moduleId];
if (typeof maybeModule === 'undefined') {
// `moduleId` is available but the module in cache is unavailable,
// which indicates the module is somehow corrupted (e.g. broken Webpacak `module` globals).
// We will warn the user (as this is likely a mistake) and assume they cannot be refreshed.
console.warn('[React Refresh] Failed to get exports for module: ' + moduleId + '.');
return {};
}
var exportsOrPromise = maybeModule.exports;
if (typeof Promise !== 'undefined' && exportsOrPromise instanceof Promise) {
return exportsOrPromise.then(function (exports) {
return exports;
});
}
return exportsOrPromise;
}
/**
* Calculates the signature of a React refresh boundary.
* If this signature changes, it's unsafe to accept the boundary.
*
* This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L795-L816).
* @param {*} moduleExports A Webpack module exports object.
* @returns {string[]} A React refresh boundary signature array.
*/
function getReactRefreshBoundarySignature(moduleExports) {
var signature = [];
signature.push(Refresh.getFamilyByType(moduleExports));
if (moduleExports == null || typeof moduleExports !== 'object') {
// Exit if we can't iterate over exports.
return signature;
}
for (var key in moduleExports) {
if (key === '__esModule') {
continue;
}
signature.push(key);
signature.push(Refresh.getFamilyByType(moduleExports[key]));
}
return signature;
}
/**
* Creates a data object to be retained across refreshes.
* This object should not transtively reference previous exports,
* which can form infinite chain of objects across refreshes, which can pressure RAM.
*
* @param {*} moduleExports A Webpack module exports object.
* @returns {*} A React refresh boundary signature array.
*/
function getWebpackHotData(moduleExports) {
return {
signature: getReactRefreshBoundarySignature(moduleExports),
isReactRefreshBoundary: isReactRefreshBoundary(moduleExports)
};
}
/**
* Creates a helper that performs a delayed React refresh.
* @returns {function(function(): void): void} A debounced React refresh function.
*/
function createDebounceUpdate() {
/**
* A cached setTimeout handler.
* @type {number | undefined}
*/
var refreshTimeout;
/**
* Performs react refresh on a delay and clears the error overlay.
* @param {function(): void} callback
* @returns {void}
*/
function enqueueUpdate(callback) {
if (typeof refreshTimeout === 'undefined') {
refreshTimeout = setTimeout(function () {
refreshTimeout = undefined;
Refresh.performReactRefresh();
callback();
}, 30);
}
}
return enqueueUpdate;
}
/**
* Checks if all exports are likely a React component.
*
* This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L748-L774).
* @param {*} moduleExports A Webpack module exports object.
* @returns {boolean} Whether the exports are React component like.
*/
function isReactRefreshBoundary(moduleExports) {
if (Refresh.isLikelyComponentType(moduleExports)) {
return true;
}
if (moduleExports === undefined || moduleExports === null || typeof moduleExports !== 'object') {
// Exit if we can't iterate over exports.
return false;
}
var hasExports = false;
var areAllExportsComponents = true;
for (var key in moduleExports) {
hasExports = true;
// This is the ES Module indicator flag
if (key === '__esModule') {
continue;
}
// We can (and have to) safely execute getters here,
// as Webpack manually assigns harmony exports to getters,
// without any side-effects attached.
// Ref: https://github.com/webpack/webpack/blob/b93048643fe74de2a6931755911da1212df55897/lib/MainTemplate.js#L281
var exportValue = moduleExports[key];
if (!Refresh.isLikelyComponentType(exportValue)) {
areAllExportsComponents = false;
}
}
return hasExports && areAllExportsComponents;
}
/**
* Checks if exports are likely a React component and registers them.
*
* This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L818-L835).
* @param {*} moduleExports A Webpack module exports object.
* @param {string} moduleId A Webpack module ID.
* @returns {void}
*/
function registerExportsForReactRefresh(moduleExports, moduleId) {
if (Refresh.isLikelyComponentType(moduleExports)) {
// Register module.exports if it is likely a component
Refresh.register(moduleExports, moduleId + ' %exports%');
}
if (moduleExports === undefined || moduleExports === null || typeof moduleExports !== 'object') {
// Exit if we can't iterate over the exports.
return;
}
for (var key in moduleExports) {
// Skip registering the ES Module indicator
if (key === '__esModule') {
continue;
}
var exportValue = moduleExports[key];
if (Refresh.isLikelyComponentType(exportValue)) {
var typeID = moduleId + ' %exports% ' + key;
Refresh.register(exportValue, typeID);
}
}
}
/**
* Compares previous and next module objects to check for mutated boundaries.
*
* This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L776-L792).
* @param {*} prevSignature The signature of the current Webpack module exports object.
* @param {*} nextSignature The signature of the next Webpack module exports object.
* @returns {boolean} Whether the React refresh boundary should be invalidated.
*/
function shouldInvalidateReactRefreshBoundary(prevSignature, nextSignature) {
if (prevSignature.length !== nextSignature.length) {
return true;
}
for (var i = 0; i < nextSignature.length; i += 1) {
if (prevSignature[i] !== nextSignature[i]) {
return true;
}
}
return false;
}
var enqueueUpdate = createDebounceUpdate();
function executeRuntime(moduleExports, moduleId, webpackHot, refreshOverlay, isTest) {
registerExportsForReactRefresh(moduleExports, moduleId);
if (webpackHot) {
var isHotUpdate = !!webpackHot.data;
var prevData;
if (isHotUpdate) {
prevData = webpackHot.data.prevData;
}
if (isReactRefreshBoundary(moduleExports)) {
webpackHot.dispose(
/**
* A callback to performs a full refresh if React has unrecoverable errors,
* and also caches the to-be-disposed module.
* @param {*} data A hot module data object from Webpack HMR.
* @returns {void}
*/
function hotDisposeCallback(data) {
// We have to mutate the data object to get data registered and cached
data.prevData = getWebpackHotData(moduleExports);
});
webpackHot.accept(
/**
* An error handler to allow self-recovering behaviours.
* @param {Error} error An error occurred during evaluation of a module.
* @returns {void}
*/
function hotErrorHandler(error) {
if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {
refreshOverlay.handleRuntimeError(error);
}
if (typeof isTest !== 'undefined' && isTest) {
if (window.onHotAcceptError) {
window.onHotAcceptError(error.message);
}
}
__webpack_require__.c[moduleId].hot.accept(hotErrorHandler);
});
if (isHotUpdate) {
if (prevData && prevData.isReactRefreshBoundary && shouldInvalidateReactRefreshBoundary(prevData.signature, getReactRefreshBoundarySignature(moduleExports))) {
webpackHot.invalidate();
} else {
enqueueUpdate(
/**
* A function to dismiss the error overlay after performing React refresh.
* @returns {void}
*/
function updateCallback() {
if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {
refreshOverlay.clearRuntimeErrors();
}
});
}
}
} else {
if (isHotUpdate && typeof prevData !== 'undefined') {
webpackHot.invalidate();
}
}
}
}
module.exports = Object.freeze({
enqueueUpdate: enqueueUpdate,
executeRuntime: executeRuntime,
getModuleExports: getModuleExports,
isReactRefreshBoundary: isReactRefreshBoundary,
registerExportsForReactRefresh: registerExportsForReactRefresh
});
/***/ },
/***/ "./node_modules/ansi-html-community/index.js"
/*!***************************************************!*\
!*** ./node_modules/ansi-html-community/index.js ***!
\***************************************************/
(module) {
"use strict";
module.exports = ansiHTML;
// Reference to https://github.com/sindresorhus/ansi-regex
var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/;
var _defColors = {
reset: ['fff', '000'],
// [FOREGROUD_COLOR, BACKGROUND_COLOR]
black: '000',
red: 'ff0000',
green: '209805',
yellow: 'e8bf03',
blue: '0000ff',
magenta: 'ff00ff',
cyan: '00ffee',
lightgrey: 'f0f0f0',
darkgrey: '888'
};
var _styles = {
30: 'black',
31: 'red',
32: 'green',
33: 'yellow',
34: 'blue',
35: 'magenta',
36: 'cyan',
37: 'lightgrey'
};
var _openTags = {
'1': 'font-weight:bold',
// bold
'2': 'opacity:0.5',
// dim
'3': '',
// italic
'4': '',
// underscore
'8': 'display:none',
// hidden
'9': '' // delete
};
var _closeTags = {
'23': '',
// reset italic
'24': '',
// reset underscore
'29': '' // reset delete
};
[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {
_closeTags[n] = '';
});
/**
* Converts text with ANSI color codes to HTML markup.
* @param {String} text
* @returns {*}
*/
function ansiHTML(text) {
// Returns the text if the string has no ANSI escape code.
if (!_regANSI.test(text)) {
return text;
}
// Cache opened sequence.
var ansiCodes = [];
// Replace with markup.
var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) {
var ot = _openTags[seq];
if (ot) {
// If current sequence has been opened, close it.
if (!!~ansiCodes.indexOf(seq)) {
// eslint-disable-line no-extra-boolean-cast
ansiCodes.pop();
return '';
}
// Open tag.
ansiCodes.push(seq);
return ot[0] === '<' ? ot : '';
}
var ct = _closeTags[seq];
if (ct) {
// Pop sequence
ansiCodes.pop();
return ct;
}
return '';
});
// Make sure tags are closed.
var l = ansiCodes.length;
l > 0 && (ret += Array(l + 1).join(''));
return ret;
}
/**
* Customize colors.
* @param {Object} colors reference to _defColors
*/
ansiHTML.setColors = function (colors) {
if (typeof colors !== 'object') {
throw new Error('`colors` parameter must be an Object.');
}
var _finalColors = {};
for (var key in _defColors) {
var hex = colors.hasOwnProperty(key) ? colors[key] : null;
if (!hex) {
_finalColors[key] = _defColors[key];
continue;
}
if ('reset' === key) {
if (typeof hex === 'string') {
hex = [hex];
}
if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {
return typeof h !== 'string';
})) {
throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000');
}
var defHexColor = _defColors[key];
if (!hex[0]) {
hex[0] = defHexColor[0];
}
if (hex.length === 1 || !hex[1]) {
hex = [hex[0]];
hex.push(defHexColor[1]);
}
hex = hex.slice(0, 2);
} else if (typeof hex !== 'string') {
throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000');
}
_finalColors[key] = hex;
}
_setTags(_finalColors);
};
/**
* Reset colors.
*/
ansiHTML.reset = function () {
_setTags(_defColors);
};
/**
* Expose tags, including open and close.
* @type {Object}
*/
ansiHTML.tags = {};
if (Object.defineProperty) {
Object.defineProperty(ansiHTML.tags, 'open', {
get: function () {
return _openTags;
}
});
Object.defineProperty(ansiHTML.tags, 'close', {
get: function () {
return _closeTags;
}
});
} else {
ansiHTML.tags.open = _openTags;
ansiHTML.tags.close = _closeTags;
}
function _setTags(colors) {
// reset all
_openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1];
// inverse
_openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0];
// dark grey
_openTags['90'] = 'color:#' + colors.darkgrey;
for (var code in _styles) {
var color = _styles[code];
var oriColor = colors[color] || '000';
_openTags[code] = 'color:#' + oriColor;
code = parseInt(code);
_openTags[(code + 10).toString()] = 'background:#' + oriColor;
}
}
ansiHTML.reset();
/***/ },
/***/ "./node_modules/css-loader/dist/runtime/api.js"
/*!*****************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/api.js ***!
\*****************************************************/
(module) {
"use strict";
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
module.exports = function (cssWithMappingToString) {
var list = [];
// return the list of modules as css string
list.toString = function toString() {
return this.map(function (item) {
var content = "";
var needLayer = typeof item[5] !== "undefined";
if (item[4]) {
content += "@supports (".concat(item[4], ") {");
}
if (item[2]) {
content += "@media ".concat(item[2], " {");
}
if (needLayer) {
content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
}
content += cssWithMappingToString(item);
if (needLayer) {
content += "}";
}
if (item[2]) {
content += "}";
}
if (item[4]) {
content += "}";
}
return content;
}).join("");
};
// import a list of modules into the list
list.i = function i(modules, media, dedupe, supports, layer) {
if (typeof modules === "string") {
modules = [[null, modules, undefined]];
}
var alreadyImportedModules = {};
if (dedupe) {
for (var k = 0; k < this.length; k++) {
var id = this[k][0];
if (id != null) {
alreadyImportedModules[id] = true;
}
}
}
for (var _k = 0; _k < modules.length; _k++) {
var item = [].concat(modules[_k]);
if (dedupe && alreadyImportedModules[item[0]]) {
continue;
}
if (typeof layer !== "undefined") {
if (typeof item[5] === "undefined") {
item[5] = layer;
} else {
item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
item[5] = layer;
}
}
if (media) {
if (!item[2]) {
item[2] = media;
} else {
item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
item[2] = media;
}
}
if (supports) {
if (!item[4]) {
item[4] = "".concat(supports);
} else {
item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
item[4] = supports;
}
}
list.push(item);
}
};
return list;
};
/***/ },
/***/ "./node_modules/css-loader/dist/runtime/getUrl.js"
/*!********************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
\********************************************************/
(module) {
"use strict";
module.exports = function (url, options) {
if (!options) {
options = {};
}
if (!url) {
return url;
}
url = String(url.__esModule ? url.default : url);
// If url is already wrapped in quotes, remove them
if (/^['"].*['"]$/.test(url)) {
url = url.slice(1, -1);
}
if (options.hash) {
url += options.hash;
}
// Should url be wrapped?
// See https://drafts.csswg.org/css-values-3/#urls
if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) {
return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\"");
}
return url;
};
/***/ },
/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js"
/*!************************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
\************************************************************/
(module) {
"use strict";
module.exports = function (item) {
var content = item[1];
var cssMapping = item[3];
if (!cssMapping) {
return content;
}
if (typeof btoa === "function") {
var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
var sourceMapping = "/*# ".concat(data, " */");
return [content].concat([sourceMapping]).join("\n");
}
return [content].join("\n");
};
/***/ },
/***/ "./node_modules/events/events.js"
/*!***************************************!*\
!*** ./node_modules/events/events.js ***!
\***************************************/
(module) {
"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
var R = typeof Reflect === 'object' ? Reflect : null;
var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
return Function.prototype.apply.call(target, receiver, args);
};
var ReflectOwnKeys;
if (R && typeof R.ownKeys === 'function') {
ReflectOwnKeys = R.ownKeys;
} else if (Object.getOwnPropertySymbols) {
ReflectOwnKeys = function ReflectOwnKeys(target) {
return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
};
} else {
ReflectOwnKeys = function ReflectOwnKeys(target) {
return Object.getOwnPropertyNames(target);
};
}
function ProcessEmitWarning(warning) {
if (console && console.warn) console.warn(warning);
}
var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
return value !== value;
};
function EventEmitter() {
EventEmitter.init.call(this);
}
module.exports = EventEmitter;
module.exports.once = once;
// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;
EventEmitter.prototype._events = undefined;
EventEmitter.prototype._eventsCount = 0;
EventEmitter.prototype._maxListeners = undefined;
// By default EventEmitters will print a warning if more than 10 listeners are
// added to it. This is a useful default which helps finding memory leaks.
var defaultMaxListeners = 10;
function checkListener(listener) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
}
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
enumerable: true,
get: function () {
return defaultMaxListeners;
},
set: function (arg) {
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
}
defaultMaxListeners = arg;
}
});
EventEmitter.init = function () {
if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
this._events = Object.create(null);
this._eventsCount = 0;
}
this._maxListeners = this._maxListeners || undefined;
};
// Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
}
this._maxListeners = n;
return this;
};
function _getMaxListeners(that) {
if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
return that._maxListeners;
}
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
return _getMaxListeners(this);
};
EventEmitter.prototype.emit = function emit(type) {
var args = [];
for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
var doError = type === 'error';
var events = this._events;
if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;
// If there is no 'error' event listener then throw.
if (doError) {
var er;
if (args.length > 0) er = args[0];
if (er instanceof Error) {
// Note: The comments on the `throw` lines are intentional, they show
// up in Node's output if this results in an unhandled exception.
throw er; // Unhandled 'error' event
}
// At least give some kind of context to the user
var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
err.context = er;
throw err; // Unhandled 'error' event
}
var handler = events[type];
if (handler === undefined) return false;
if (typeof handler === 'function') {
ReflectApply(handler, this, args);
} else {
var len = handler.length;
var listeners = arrayClone(handler, len);
for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);
}
return true;
};
function _addListener(target, type, listener, prepend) {
var m;
var events;
var existing;
checkListener(listener);
events = target._events;
if (events === undefined) {
events = target._events = Object.create(null);
target._eventsCount = 0;
} else {
// To avoid recursion in the case that type === "newListener"! Before
// adding it to the listeners, first emit "newListener".
if (events.newListener !== undefined) {
target.emit('newListener', type, listener.listener ? listener.listener : listener);
// Re-assign `events` because a newListener handler could have caused the
// this._events to be assigned to a new object
events = target._events;
}
existing = events[type];
}
if (existing === undefined) {
// Optimize the case of one listener. Don't need the extra array object.
existing = events[type] = listener;
++target._eventsCount;
} else {
if (typeof existing === 'function') {
// Adding the second element, need to change to array.
existing = events[type] = prepend ? [listener, existing] : [existing, listener];
// If we've already got an array, just append.
} else if (prepend) {
existing.unshift(listener);
} else {
existing.push(listener);
}
// Check for listener leak
m = _getMaxListeners(target);
if (m > 0 && existing.length > m && !existing.warned) {
existing.warned = true;
// No error code for this since it is a Warning
// eslint-disable-next-line no-restricted-syntax
var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
w.name = 'MaxListenersExceededWarning';
w.emitter = target;
w.type = type;
w.count = existing.length;
ProcessEmitWarning(w);
}
}
return target;
}
EventEmitter.prototype.addListener = function addListener(type, listener) {
return _addListener(this, type, listener, false);
};
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
EventEmitter.prototype.prependListener = function prependListener(type, listener) {
return _addListener(this, type, listener, true);
};
function onceWrapper() {
if (!this.fired) {
this.target.removeListener(this.type, this.wrapFn);
this.fired = true;
if (arguments.length === 0) return this.listener.call(this.target);
return this.listener.apply(this.target, arguments);
}
}
function _onceWrap(target, type, listener) {
var state = {
fired: false,
wrapFn: undefined,
target: target,
type: type,
listener: listener
};
var wrapped = onceWrapper.bind(state);
wrapped.listener = listener;
state.wrapFn = wrapped;
return wrapped;
}
EventEmitter.prototype.once = function once(type, listener) {
checkListener(listener);
this.on(type, _onceWrap(this, type, listener));
return this;
};
EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
checkListener(listener);
this.prependListener(type, _onceWrap(this, type, listener));
return this;
};
// Emits a 'removeListener' event if and only if the listener was removed.
EventEmitter.prototype.removeListener = function removeListener(type, listener) {
var list, events, position, i, originalListener;
checkListener(listener);
events = this._events;
if (events === undefined) return this;
list = events[type];
if (list === undefined) return this;
if (list === listener || list.listener === listener) {
if (--this._eventsCount === 0) this._events = Object.create(null);else {
delete events[type];
if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
}
} else if (typeof list !== 'function') {
position = -1;
for (i = list.length - 1; i >= 0; i--) {
if (list[i] === listener || list[i].listener === listener) {
originalListener = list[i].listener;
position = i;
break;
}
}
if (position < 0) return this;
if (position === 0) list.shift();else {
spliceOne(list, position);
}
if (list.length === 1) events[type] = list[0];
if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
}
return this;
};
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
var listeners, events, i;
events = this._events;
if (events === undefined) return this;
// not listening for removeListener, no need to emit
if (events.removeListener === undefined) {
if (arguments.length === 0) {
this._events = Object.create(null);
this._eventsCount = 0;
} else if (events[type] !== undefined) {
if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
}
return this;
}
// emit removeListener for all listeners on all events
if (arguments.length === 0) {
var keys = Object.keys(events);
var key;
for (i = 0; i < keys.length; ++i) {
key = keys[i];
if (key === 'removeListener') continue;
this.removeAllListeners(key);
}
this.removeAllListeners('removeListener');
this._events = Object.create(null);
this._eventsCount = 0;
return this;
}
listeners = events[type];
if (typeof listeners === 'function') {
this.removeListener(type, listeners);
} else if (listeners !== undefined) {
// LIFO order
for (i = listeners.length - 1; i >= 0; i--) {
this.removeListener(type, listeners[i]);
}
}
return this;
};
function _listeners(target, type, unwrap) {
var events = target._events;
if (events === undefined) return [];
var evlistener = events[type];
if (evlistener === undefined) return [];
if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
}
EventEmitter.prototype.listeners = function listeners(type) {
return _listeners(this, type, true);
};
EventEmitter.prototype.rawListeners = function rawListeners(type) {
return _listeners(this, type, false);
};
EventEmitter.listenerCount = function (emitter, type) {
if (typeof emitter.listenerCount === 'function') {
return emitter.listenerCount(type);
} else {
return listenerCount.call(emitter, type);
}
};
EventEmitter.prototype.listenerCount = listenerCount;
function listenerCount(type) {
var events = this._events;
if (events !== undefined) {
var evlistener = events[type];
if (typeof evlistener === 'function') {
return 1;
} else if (evlistener !== undefined) {
return evlistener.length;
}
}
return 0;
}
EventEmitter.prototype.eventNames = function eventNames() {
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
};
function arrayClone(arr, n) {
var copy = new Array(n);
for (var i = 0; i < n; ++i) copy[i] = arr[i];
return copy;
}
function spliceOne(list, index) {
for (; index + 1 < list.length; index++) list[index] = list[index + 1];
list.pop();
}
function unwrapListeners(arr) {
var ret = new Array(arr.length);
for (var i = 0; i < ret.length; ++i) {
ret[i] = arr[i].listener || arr[i];
}
return ret;
}
function once(emitter, name) {
return new Promise(function (resolve, reject) {
function errorListener(err) {
emitter.removeListener(name, resolver);
reject(err);
}
function resolver() {
if (typeof emitter.removeListener === 'function') {
emitter.removeListener('error', errorListener);
}
resolve([].slice.call(arguments));
}
;
eventTargetAgnosticAddListener(emitter, name, resolver, {
once: true
});
if (name !== 'error') {
addErrorHandlerIfEventEmitter(emitter, errorListener, {
once: true
});
}
});
}
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
if (typeof emitter.on === 'function') {
eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
}
}
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
if (typeof emitter.on === 'function') {
if (flags.once) {
emitter.once(name, listener);
} else {
emitter.on(name, listener);
}
} else if (typeof emitter.addEventListener === 'function') {
// EventTarget does not have `error` event semantics like Node
// EventEmitters, we do not listen for `error` events here.
emitter.addEventListener(name, function wrapListener(arg) {
// IE does not have builtin `{ once: true }` support so we
// have to do it manually.
if (flags.once) {
emitter.removeEventListener(name, wrapListener);
}
listener(arg);
});
} else {
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
}
}
/***/ },
/***/ "./node_modules/react-dom/cjs/react-dom-client.development.js"
/*!********************************************************************!*\
!*** ./node_modules/react-dom/cjs/react-dom-client.development.js ***!
\********************************************************************/
(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
/**
* @license React
* react-dom-client.development.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/*
Modernizr 3.0.0pre (Custom Build) | MIT
*/
true && function () {
function findHook(fiber, id) {
for (fiber = fiber.memoizedState; null !== fiber && 0 < id;) fiber = fiber.next, id--;
return fiber;
}
function copyWithSetImpl(obj, path, index, value) {
if (index >= path.length) return value;
var key = path[index],
updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
return updated;
}
function copyWithRename(obj, oldPath, newPath) {
if (oldPath.length !== newPath.length) console.warn("copyWithRename() expects paths of the same length");else {
for (var i = 0; i < newPath.length - 1; i++) if (oldPath[i] !== newPath[i]) {
console.warn("copyWithRename() expects paths to be the same except for the deepest key");
return;
}
return copyWithRenameImpl(obj, oldPath, newPath, 0);
}
}
function copyWithRenameImpl(obj, oldPath, newPath, index) {
var oldKey = oldPath[index],
updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
index + 1 === oldPath.length ? (updated[newPath[index]] = updated[oldKey], isArrayImpl(updated) ? updated.splice(oldKey, 1) : delete updated[oldKey]) : updated[oldKey] = copyWithRenameImpl(obj[oldKey], oldPath, newPath, index + 1);
return updated;
}
function copyWithDeleteImpl(obj, path, index) {
var key = path[index],
updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
if (index + 1 === path.length) return isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key], updated;
updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
return updated;
}
function shouldSuspendImpl() {
return !1;
}
function shouldErrorImpl() {
return null;
}
function createFiber(tag, pendingProps, key, mode) {
return new FiberNode(tag, pendingProps, key, mode);
}
function warnInvalidHookAccess() {
console.error("Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks");
}
function warnInvalidContextAccess() {
console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");
}
function noop$2() {}
function warnForMissingKey() {}
function setToSortedString(set) {
var array = [];
set.forEach(function (value) {
array.push(value);
});
return array.sort().join(", ");
}
function scheduleRoot(root, element) {
root.context === emptyContextObject && (updateContainerSync(element, root, null, null), flushSyncWork$1());
}
function scheduleRefresh(root, update) {
if (null !== resolveFamily) {
var staleFamilies = update.staleFamilies;
update = update.updatedFamilies;
flushPassiveEffects();
scheduleFibersWithFamiliesRecursively(root.current, update, staleFamilies);
flushSyncWork$1();
}
}
function setRefreshHandler(handler) {
resolveFamily = handler;
}
function isValidContainer(node) {
return !(!node || 1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType);
}
function getIteratorFn(maybeIterable) {
if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"];
return "function" === typeof maybeIterable ? maybeIterable : null;
}
function getComponentNameFromType(type) {
if (null == type) return null;
if ("function" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;
if ("string" === typeof type) return type;
switch (type) {
case REACT_FRAGMENT_TYPE:
return "Fragment";
case REACT_PORTAL_TYPE:
return "Portal";
case REACT_PROFILER_TYPE:
return "Profiler";
case REACT_STRICT_MODE_TYPE:
return "StrictMode";
case REACT_SUSPENSE_TYPE:
return "Suspense";
case REACT_SUSPENSE_LIST_TYPE:
return "SuspenseList";
}
if ("object" === typeof type) switch ("number" === typeof type.tag && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
case REACT_CONTEXT_TYPE:
return (type.displayName || "Context") + ".Provider";
case REACT_CONSUMER_TYPE:
return (type._context.displayName || "Context") + ".Consumer";
case REACT_FORWARD_REF_TYPE:
var innerType = type.render;
type = type.displayName;
type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef");
return type;
case REACT_MEMO_TYPE:
return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo";
case REACT_LAZY_TYPE:
innerType = type._payload;
type = type._init;
try {
return getComponentNameFromType(type(innerType));
} catch (x) {}
}
return null;
}
function getComponentNameFromOwner(owner) {
return "number" === typeof owner.tag ? getComponentNameFromFiber(owner) : "string" === typeof owner.name ? owner.name : null;
}
function getComponentNameFromFiber(fiber) {
var type = fiber.type;
switch (fiber.tag) {
case 24:
return "Cache";
case 9:
return (type._context.displayName || "Context") + ".Consumer";
case 10:
return (type.displayName || "Context") + ".Provider";
case 18:
return "DehydratedFragment";
case 11:
return fiber = type.render, fiber = fiber.displayName || fiber.name || "", type.displayName || ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef");
case 7:
return "Fragment";
case 26:
case 27:
case 5:
return type;
case 4:
return "Portal";
case 3:
return "Root";
case 6:
return "Text";
case 16:
return getComponentNameFromType(type);
case 8:
return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode";
case 22:
return "Offscreen";
case 12:
return "Profiler";
case 21:
return "Scope";
case 13:
return "Suspense";
case 19:
return "SuspenseList";
case 25:
return "TracingMarker";
case 1:
case 0:
case 14:
case 15:
if ("function" === typeof type) return type.displayName || type.name || null;
if ("string" === typeof type) return type;
break;
case 29:
type = fiber._debugInfo;
if (null != type) for (var i = type.length - 1; 0 <= i; i--) if ("string" === typeof type[i].name) return type[i].name;
if (null !== fiber.return) return getComponentNameFromFiber(fiber.return);
}
return null;
}
function disabledLog() {}
function disableLogs() {
if (0 === disabledDepth) {
prevLog = console.log;
prevInfo = console.info;
prevWarn = console.warn;
prevError = console.error;
prevGroup = console.group;
prevGroupCollapsed = console.groupCollapsed;
prevGroupEnd = console.groupEnd;
var props = {
configurable: !0,
enumerable: !0,
value: disabledLog,
writable: !0
};
Object.defineProperties(console, {
info: props,
log: props,
warn: props,
error: props,
group: props,
groupCollapsed: props,
groupEnd: props
});
}
disabledDepth++;
}
function reenableLogs() {
disabledDepth--;
if (0 === disabledDepth) {
var props = {
configurable: !0,
enumerable: !0,
writable: !0
};
Object.defineProperties(console, {
log: assign({}, props, {
value: prevLog
}),
info: assign({}, props, {
value: prevInfo
}),
warn: assign({}, props, {
value: prevWarn
}),
error: assign({}, props, {
value: prevError
}),
group: assign({}, props, {
value: prevGroup
}),
groupCollapsed: assign({}, props, {
value: prevGroupCollapsed
}),
groupEnd: assign({}, props, {
value: prevGroupEnd
})
});
}
0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
}
function describeBuiltInComponentFrame(name) {
if (void 0 === prefix) try {
throw Error();
} catch (x) {
var match = x.stack.trim().match(/\n( *(at )?)/);
prefix = match && match[1] || "";
suffix = -1 < x.stack.indexOf("\n at") ? " ()" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
}
return "\n" + prefix + name + suffix;
}
function describeNativeComponentFrame(fn, construct) {
if (!fn || reentry) return "";
var frame = componentFrameCache.get(fn);
if (void 0 !== frame) return frame;
reentry = !0;
frame = Error.prepareStackTrace;
Error.prepareStackTrace = void 0;
var previousDispatcher = null;
previousDispatcher = ReactSharedInternals.H;
ReactSharedInternals.H = null;
disableLogs();
try {
var RunInRootFrame = {
DetermineComponentFrameRoot: function () {
try {
if (construct) {
var Fake = function () {
throw Error();
};
Object.defineProperty(Fake.prototype, "props", {
set: function () {
throw Error();
}
});
if ("object" === typeof Reflect && Reflect.construct) {
try {
Reflect.construct(Fake, []);
} catch (x) {
var control = x;
}
Reflect.construct(fn, [], Fake);
} else {
try {
Fake.call();
} catch (x$0) {
control = x$0;
}
fn.call(Fake.prototype);
}
} else {
try {
throw Error();
} catch (x$1) {
control = x$1;
}
(Fake = fn()) && "function" === typeof Fake.catch && Fake.catch(function () {});
}
} catch (sample) {
if (sample && control && "string" === typeof sample.stack) return [sample.stack, control.stack];
}
return [null, null];
}
};
RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", {
value: "DetermineComponentFrameRoot"
});
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
sampleStack = _RunInRootFrame$Deter[0],
controlStack = _RunInRootFrame$Deter[1];
if (sampleStack && controlStack) {
var sampleLines = sampleStack.split("\n"),
controlLines = controlStack.split("\n");
for (_RunInRootFrame$Deter = namePropDescriptor = 0; namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot");) namePropDescriptor++;
for (; _RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot");) _RunInRootFrame$Deter++;
if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length) for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter];) _RunInRootFrame$Deter--;
for (; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--) if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
do if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at ");
fn.displayName && _frame.includes("") && (_frame = _frame.replace("", fn.displayName));
"function" === typeof fn && componentFrameCache.set(fn, _frame);
return _frame;
} while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
}
break;
}
}
} finally {
reentry = !1, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
}
sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
"function" === typeof fn && componentFrameCache.set(fn, sampleLines);
return sampleLines;
}
function describeFiber(fiber) {
switch (fiber.tag) {
case 26:
case 27:
case 5:
return describeBuiltInComponentFrame(fiber.type);
case 16:
return describeBuiltInComponentFrame("Lazy");
case 13:
return describeBuiltInComponentFrame("Suspense");
case 19:
return describeBuiltInComponentFrame("SuspenseList");
case 0:
case 15:
return fiber = describeNativeComponentFrame(fiber.type, !1), fiber;
case 11:
return fiber = describeNativeComponentFrame(fiber.type.render, !1), fiber;
case 1:
return fiber = describeNativeComponentFrame(fiber.type, !0), fiber;
default:
return "";
}
}
function getStackByFiberInDevAndProd(workInProgress) {
try {
var info = "";
do {
info += describeFiber(workInProgress);
var debugInfo = workInProgress._debugInfo;
if (debugInfo) for (var i = debugInfo.length - 1; 0 <= i; i--) {
var entry = debugInfo[i];
if ("string" === typeof entry.name) {
var JSCompiler_temp_const = info,
env = entry.env;
var JSCompiler_inline_result = describeBuiltInComponentFrame(entry.name + (env ? " [" + env + "]" : ""));
info = JSCompiler_temp_const + JSCompiler_inline_result;
}
}
workInProgress = workInProgress.return;
} while (workInProgress);
return info;
} catch (x) {
return "\nError generating stack: " + x.message + "\n" + x.stack;
}
}
function getCurrentFiberOwnerNameInDevOrNull() {
if (null === current) return null;
var owner = current._debugOwner;
return null != owner ? getComponentNameFromOwner(owner) : null;
}
function getCurrentFiberStackInDev() {
return null === current ? "" : getStackByFiberInDevAndProd(current);
}
function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {
var previousFiber = current;
ReactSharedInternals.getCurrentStack = null === fiber ? null : getCurrentFiberStackInDev;
isRendering = !1;
current = fiber;
try {
return callback(arg0, arg1, arg2, arg3, arg4);
} finally {
current = previousFiber;
}
// removed by dead control flow
}
function getNearestMountedFiber(fiber) {
var node = fiber,
nearestMounted = fiber;
if (fiber.alternate) for (; node.return;) node = node.return;else {
fiber = node;
do node = fiber, 0 !== (node.flags & 4098) && (nearestMounted = node.return), fiber = node.return; while (fiber);
}
return 3 === node.tag ? nearestMounted : null;
}
function getSuspenseInstanceFromFiber(fiber) {
if (13 === fiber.tag) {
var suspenseState = fiber.memoizedState;
null === suspenseState && (fiber = fiber.alternate, null !== fiber && (suspenseState = fiber.memoizedState));
if (null !== suspenseState) return suspenseState.dehydrated;
}
return null;
}
function assertIsMounted(fiber) {
if (getNearestMountedFiber(fiber) !== fiber) throw Error("Unable to find node on an unmounted component.");
}
function findCurrentFiberUsingSlowPath(fiber) {
var alternate = fiber.alternate;
if (!alternate) {
alternate = getNearestMountedFiber(fiber);
if (null === alternate) throw Error("Unable to find node on an unmounted component.");
return alternate !== fiber ? null : fiber;
}
for (var a = fiber, b = alternate;;) {
var parentA = a.return;
if (null === parentA) break;
var parentB = parentA.alternate;
if (null === parentB) {
b = parentA.return;
if (null !== b) {
a = b;
continue;
}
break;
}
if (parentA.child === parentB.child) {
for (parentB = parentA.child; parentB;) {
if (parentB === a) return assertIsMounted(parentA), fiber;
if (parentB === b) return assertIsMounted(parentA), alternate;
parentB = parentB.sibling;
}
throw Error("Unable to find node on an unmounted component.");
}
if (a.return !== b.return) a = parentA, b = parentB;else {
for (var didFindChild = !1, _child = parentA.child; _child;) {
if (_child === a) {
didFindChild = !0;
a = parentA;
b = parentB;
break;
}
if (_child === b) {
didFindChild = !0;
b = parentA;
a = parentB;
break;
}
_child = _child.sibling;
}
if (!didFindChild) {
for (_child = parentB.child; _child;) {
if (_child === a) {
didFindChild = !0;
a = parentB;
b = parentA;
break;
}
if (_child === b) {
didFindChild = !0;
b = parentB;
a = parentA;
break;
}
_child = _child.sibling;
}
if (!didFindChild) throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.");
}
}
if (a.alternate !== b) throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.");
}
if (3 !== a.tag) throw Error("Unable to find node on an unmounted component.");
return a.stateNode.current === a ? fiber : alternate;
}
function findCurrentHostFiberImpl(node) {
var tag = node.tag;
if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;
for (node = node.child; null !== node;) {
tag = findCurrentHostFiberImpl(node);
if (null !== tag) return tag;
node = node.sibling;
}
return null;
}
function createCursor(defaultValue) {
return {
current: defaultValue
};
}
function pop(cursor, fiber) {
0 > index$jscomp$0 ? console.error("Unexpected pop.") : (fiber !== fiberStack[index$jscomp$0] && console.error("Unexpected Fiber popped."), cursor.current = valueStack[index$jscomp$0], valueStack[index$jscomp$0] = null, fiberStack[index$jscomp$0] = null, index$jscomp$0--);
}
function push(cursor, value, fiber) {
index$jscomp$0++;
valueStack[index$jscomp$0] = cursor.current;
fiberStack[index$jscomp$0] = fiber;
cursor.current = value;
}
function requiredContext(c) {
null === c && console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");
return c;
}
function pushHostContainer(fiber, nextRootInstance) {
push(rootInstanceStackCursor, nextRootInstance, fiber);
push(contextFiberStackCursor, fiber, fiber);
push(contextStackCursor, null, fiber);
var nextRootContext = nextRootInstance.nodeType;
switch (nextRootContext) {
case 9:
case 11:
nextRootContext = 9 === nextRootContext ? "#document" : "#fragment";
nextRootInstance = (nextRootInstance = nextRootInstance.documentElement) ? (nextRootInstance = nextRootInstance.namespaceURI) ? getOwnHostContext(nextRootInstance) : HostContextNamespaceNone : HostContextNamespaceNone;
break;
default:
if (nextRootInstance = 8 === nextRootContext ? nextRootInstance.parentNode : nextRootInstance, nextRootContext = nextRootInstance.tagName, nextRootInstance = nextRootInstance.namespaceURI) nextRootInstance = getOwnHostContext(nextRootInstance), nextRootInstance = getChildHostContextProd(nextRootInstance, nextRootContext);else switch (nextRootContext) {
case "svg":
nextRootInstance = HostContextNamespaceSvg;
break;
case "math":
nextRootInstance = HostContextNamespaceMath;
break;
default:
nextRootInstance = HostContextNamespaceNone;
}
}
nextRootContext = nextRootContext.toLowerCase();
nextRootContext = updatedAncestorInfoDev(null, nextRootContext);
nextRootContext = {
context: nextRootInstance,
ancestorInfo: nextRootContext
};
pop(contextStackCursor, fiber);
push(contextStackCursor, nextRootContext, fiber);
}
function popHostContainer(fiber) {
pop(contextStackCursor, fiber);
pop(contextFiberStackCursor, fiber);
pop(rootInstanceStackCursor, fiber);
}
function getHostContext() {
return requiredContext(contextStackCursor.current);
}
function pushHostContext(fiber) {
null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber, fiber);
var context = requiredContext(contextStackCursor.current);
var type = fiber.type;
var nextContext = getChildHostContextProd(context.context, type);
type = updatedAncestorInfoDev(context.ancestorInfo, type);
nextContext = {
context: nextContext,
ancestorInfo: type
};
context !== nextContext && (push(contextFiberStackCursor, fiber, fiber), push(contextStackCursor, nextContext, fiber));
}
function popHostContext(fiber) {
contextFiberStackCursor.current === fiber && (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));
hostTransitionProviderCursor.current === fiber && (pop(hostTransitionProviderCursor, fiber), HostTransitionContext._currentValue = NotPendingTransition);
}
function typeName(value) {
return "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
}
function willCoercionThrow(value) {
try {
return testStringCoercion(value), !1;
} catch (e) {
return !0;
}
}
function testStringCoercion(value) {
return "" + value;
}
function checkAttributeStringCoercion(value, attributeName) {
if (willCoercionThrow(value)) return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.", attributeName, typeName(value)), testStringCoercion(value);
}
function checkCSSPropertyStringCoercion(value, propName) {
if (willCoercionThrow(value)) return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.", propName, typeName(value)), testStringCoercion(value);
}
function checkFormFieldValueStringCoercion(value) {
if (willCoercionThrow(value)) return console.error("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.", typeName(value)), testStringCoercion(value);
}
function injectInternals(internals) {
if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;
var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;
if (hook.isDisabled) return !0;
if (!hook.supportsFiber) return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"), !0;
try {
rendererID = hook.inject(internals), injectedHook = hook;
} catch (err) {
console.error("React instrumentation encountered an error: %s.", err);
}
return hook.checkDCE ? !0 : !1;
}
function onCommitRoot$1(root, eventPriority) {
if (injectedHook && "function" === typeof injectedHook.onCommitFiberRoot) try {
var didError = 128 === (root.current.flags & 128);
switch (eventPriority) {
case DiscreteEventPriority:
var schedulerPriority = ImmediatePriority;
break;
case ContinuousEventPriority:
schedulerPriority = UserBlockingPriority;
break;
case DefaultEventPriority:
schedulerPriority = NormalPriority$1;
break;
case IdleEventPriority:
schedulerPriority = IdlePriority;
break;
default:
schedulerPriority = NormalPriority$1;
}
injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);
} catch (err) {
hasLoggedError || (hasLoggedError = !0, console.error("React instrumentation encountered an error: %s", err));
}
}
function setIsStrictModeForDevtools(newIsStrictMode) {
"function" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);
if (injectedHook && "function" === typeof injectedHook.setStrictMode) try {
injectedHook.setStrictMode(rendererID, newIsStrictMode);
} catch (err) {
hasLoggedError || (hasLoggedError = !0, console.error("React instrumentation encountered an error: %s", err));
}
}
function injectProfilingHooks(profilingHooks) {
injectedProfilingHooks = profilingHooks;
}
function markCommitStopped() {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markCommitStopped && injectedProfilingHooks.markCommitStopped();
}
function markComponentRenderStarted(fiber) {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markComponentRenderStarted && injectedProfilingHooks.markComponentRenderStarted(fiber);
}
function markComponentRenderStopped() {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markComponentRenderStopped && injectedProfilingHooks.markComponentRenderStopped();
}
function markRenderStarted(lanes) {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markRenderStarted && injectedProfilingHooks.markRenderStarted(lanes);
}
function markRenderStopped() {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markRenderStopped && injectedProfilingHooks.markRenderStopped();
}
function markStateUpdateScheduled(fiber, lane) {
null !== injectedProfilingHooks && "function" === typeof injectedProfilingHooks.markStateUpdateScheduled && injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
}
function clz32Fallback(x) {
x >>>= 0;
return 0 === x ? 32 : 31 - (log(x) / LN2 | 0) | 0;
}
function getLabelForLane(lane) {
if (lane & 1) return "SyncHydrationLane";
if (lane & 2) return "Sync";
if (lane & 4) return "InputContinuousHydration";
if (lane & 8) return "InputContinuous";
if (lane & 16) return "DefaultHydration";
if (lane & 32) return "Default";
if (lane & 64) return "TransitionHydration";
if (lane & 4194176) return "Transition";
if (lane & 62914560) return "Retry";
if (lane & 67108864) return "SelectiveHydration";
if (lane & 134217728) return "IdleHydration";
if (lane & 268435456) return "Idle";
if (lane & 536870912) return "Offscreen";
if (lane & 1073741824) return "Deferred";
}
function getHighestPriorityLanes(lanes) {
var pendingSyncLanes = lanes & 42;
if (0 !== pendingSyncLanes) return pendingSyncLanes;
switch (lanes & -lanes) {
case 1:
return 1;
case 2:
return 2;
case 4:
return 4;
case 8:
return 8;
case 16:
return 16;
case 32:
return 32;
case 64:
return 64;
case 128:
case 256:
case 512:
case 1024:
case 2048:
case 4096:
case 8192:
case 16384:
case 32768:
case 65536:
case 131072:
case 262144:
case 524288:
case 1048576:
case 2097152:
return lanes & 4194176;
case 4194304:
case 8388608:
case 16777216:
case 33554432:
return lanes & 62914560;
case 67108864:
return 67108864;
case 134217728:
return 134217728;
case 268435456:
return 268435456;
case 536870912:
return 536870912;
case 1073741824:
return 0;
default:
return console.error("Should have found matching lanes. This is a bug in React."), lanes;
}
}
function getNextLanes(root, wipLanes) {
var pendingLanes = root.pendingLanes;
if (0 === pendingLanes) return 0;
var nextLanes = 0,
suspendedLanes = root.suspendedLanes,
pingedLanes = root.pingedLanes,
warmLanes = root.warmLanes;
root = 0 !== root.finishedLanes;
var nonIdlePendingLanes = pendingLanes & 134217727;
0 !== nonIdlePendingLanes ? (pendingLanes = nonIdlePendingLanes & ~suspendedLanes, 0 !== pendingLanes ? nextLanes = getHighestPriorityLanes(pendingLanes) : (pingedLanes &= nonIdlePendingLanes, 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : root || (warmLanes = nonIdlePendingLanes & ~warmLanes, 0 !== warmLanes && (nextLanes = getHighestPriorityLanes(warmLanes))))) : (nonIdlePendingLanes = pendingLanes & ~suspendedLanes, 0 !== nonIdlePendingLanes ? nextLanes = getHighestPriorityLanes(nonIdlePendingLanes) : 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : root || (warmLanes = pendingLanes & ~warmLanes, 0 !== warmLanes && (nextLanes = getHighestPriorityLanes(warmLanes))));
return 0 === nextLanes ? 0 : 0 !== wipLanes && wipLanes !== nextLanes && 0 === (wipLanes & suspendedLanes) && (suspendedLanes = nextLanes & -nextLanes, warmLanes = wipLanes & -wipLanes, suspendedLanes >= warmLanes || 32 === suspendedLanes && 0 !== (warmLanes & 4194176)) ? wipLanes : nextLanes;
}
function checkIfRootIsPrerendering(root, renderLanes) {
return 0 === (root.pendingLanes & ~(root.suspendedLanes & ~root.pingedLanes) & renderLanes);
}
function computeExpirationTime(lane, currentTime) {
switch (lane) {
case 1:
case 2:
case 4:
case 8:
return currentTime + 250;
case 16:
case 32:
case 64:
case 128:
case 256:
case 512:
case 1024:
case 2048:
case 4096:
case 8192:
case 16384:
case 32768:
case 65536:
case 131072:
case 262144:
case 524288:
case 1048576:
case 2097152:
return currentTime + 5e3;
case 4194304:
case 8388608:
case 16777216:
case 33554432:
return -1;
case 67108864:
case 134217728:
case 268435456:
case 536870912:
case 1073741824:
return -1;
default:
return console.error("Should have found matching lanes. This is a bug in React."), -1;
}
}
function claimNextTransitionLane() {
var lane = nextTransitionLane;
nextTransitionLane <<= 1;
0 === (nextTransitionLane & 4194176) && (nextTransitionLane = 128);
return lane;
}
function claimNextRetryLane() {
var lane = nextRetryLane;
nextRetryLane <<= 1;
0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);
return lane;
}
function createLaneMap(initial) {
for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);
return laneMap;
}
function markRootUpdated$1(root, updateLane) {
root.pendingLanes |= updateLane;
268435456 !== updateLane && (root.suspendedLanes = 0, root.pingedLanes = 0, root.warmLanes = 0);
}
function markRootFinished(root, finishedLanes, remainingLanes, spawnedLane, updatedLanes, suspendedRetryLanes) {
var previouslyPendingLanes = root.pendingLanes;
root.pendingLanes = remainingLanes;
root.suspendedLanes = 0;
root.pingedLanes = 0;
root.warmLanes = 0;
root.expiredLanes &= remainingLanes;
root.entangledLanes &= remainingLanes;
root.errorRecoveryDisabledLanes &= remainingLanes;
root.shellSuspendCounter = 0;
var entanglements = root.entanglements,
expirationTimes = root.expirationTimes,
hiddenUpdates = root.hiddenUpdates;
for (remainingLanes = previouslyPendingLanes & ~remainingLanes; 0 < remainingLanes;) {
var index = 31 - clz32(remainingLanes),
lane = 1 << index;
entanglements[index] = 0;
expirationTimes[index] = -1;
var hiddenUpdatesForLane = hiddenUpdates[index];
if (null !== hiddenUpdatesForLane) for (hiddenUpdates[index] = null, index = 0; index < hiddenUpdatesForLane.length; index++) {
var update = hiddenUpdatesForLane[index];
null !== update && (update.lane &= -536870913);
}
remainingLanes &= ~lane;
}
0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);
0 !== suspendedRetryLanes && 0 === updatedLanes && 0 !== root.tag && (root.suspendedLanes |= suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));
}
function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {
root.pendingLanes |= spawnedLane;
root.suspendedLanes &= ~spawnedLane;
var spawnedLaneIndex = 31 - clz32(spawnedLane);
root.entangledLanes |= spawnedLane;
root.entanglements[spawnedLaneIndex] = root.entanglements[spawnedLaneIndex] | 1073741824 | entangledLanes & 4194218;
}
function markRootEntangled(root, entangledLanes) {
var rootEntangledLanes = root.entangledLanes |= entangledLanes;
for (root = root.entanglements; rootEntangledLanes;) {
var index = 31 - clz32(rootEntangledLanes),
lane = 1 << index;
lane & entangledLanes | root[index] & entangledLanes && (root[index] |= entangledLanes);
rootEntangledLanes &= ~lane;
}
}
function addFiberToLanesMap(root, fiber, lanes) {
if (isDevToolsPresent) for (root = root.pendingUpdatersLaneMap; 0 < lanes;) {
var index = 31 - clz32(lanes),
lane = 1 << index;
root[index].add(fiber);
lanes &= ~lane;
}
}
function movePendingFibersToMemoized(root, lanes) {
if (isDevToolsPresent) for (var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap, memoizedUpdaters = root.memoizedUpdaters; 0 < lanes;) {
var index = 31 - clz32(lanes);
root = 1 << index;
index = pendingUpdatersLaneMap[index];
0 < index.size && (index.forEach(function (fiber) {
var alternate = fiber.alternate;
null !== alternate && memoizedUpdaters.has(alternate) || memoizedUpdaters.add(fiber);
}), index.clear());
lanes &= ~root;
}
}
function lanesToEventPriority(lanes) {
lanes &= -lanes;
return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes ? 0 !== (lanes & 134217727) ? DefaultEventPriority : IdleEventPriority : ContinuousEventPriority : DiscreteEventPriority;
}
function resolveUpdatePriority() {
var updatePriority = ReactDOMSharedInternals.p;
if (0 !== updatePriority) return updatePriority;
updatePriority = window.event;
return void 0 === updatePriority ? DefaultEventPriority : getEventPriority(updatePriority.type);
}
function runWithPriority(priority, fn) {
var previousPriority = ReactDOMSharedInternals.p;
try {
return ReactDOMSharedInternals.p = priority, fn();
} finally {
ReactDOMSharedInternals.p = previousPriority;
}
}
function detachDeletedInstance(node) {
delete node[internalInstanceKey];
delete node[internalPropsKey];
delete node[internalEventHandlersKey];
delete node[internalEventHandlerListenersKey];
delete node[internalEventHandlesSetKey];
}
function getClosestInstanceFromNode(targetNode) {
var targetInst = targetNode[internalInstanceKey];
if (targetInst) return targetInst;
for (var parentNode = targetNode.parentNode; parentNode;) {
if (targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey]) {
parentNode = targetInst.alternate;
if (null !== targetInst.child || null !== parentNode && null !== parentNode.child) for (targetNode = getParentSuspenseInstance(targetNode); null !== targetNode;) {
if (parentNode = targetNode[internalInstanceKey]) return parentNode;
targetNode = getParentSuspenseInstance(targetNode);
}
return targetInst;
}
targetNode = parentNode;
parentNode = targetNode.parentNode;
}
return null;
}
function getInstanceFromNode(node) {
if (node = node[internalInstanceKey] || node[internalContainerInstanceKey]) {
var tag = node.tag;
if (5 === tag || 6 === tag || 13 === tag || 26 === tag || 27 === tag || 3 === tag) return node;
}
return null;
}
function getNodeFromInstance(inst) {
var tag = inst.tag;
if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;
throw Error("getNodeFromInstance: Invalid argument.");
}
function getResourcesFromRoot(root) {
var resources = root[internalRootNodeResourcesKey];
resources || (resources = root[internalRootNodeResourcesKey] = {
hoistableStyles: new Map(),
hoistableScripts: new Map()
});
return resources;
}
function markNodeAsHoistable(node) {
node[internalHoistableMarker] = !0;
}
function registerTwoPhaseEvent(registrationName, dependencies) {
registerDirectEvent(registrationName, dependencies);
registerDirectEvent(registrationName + "Capture", dependencies);
}
function registerDirectEvent(registrationName, dependencies) {
registrationNameDependencies[registrationName] && console.error("EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.", registrationName);
registrationNameDependencies[registrationName] = dependencies;
var lowerCasedName = registrationName.toLowerCase();
possibleRegistrationNames[lowerCasedName] = registrationName;
"onDoubleClick" === registrationName && (possibleRegistrationNames.ondblclick = registrationName);
for (registrationName = 0; registrationName < dependencies.length; registrationName++) allNativeEvents.add(dependencies[registrationName]);
}
function checkControlledValueProps(tagName, props) {
hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || null == props.value || ("select" === tagName ? console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.") : console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."));
props.onChange || props.readOnly || props.disabled || null == props.checked || console.error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.");
}
function isAttributeNameSafe(attributeName) {
if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) return !0;
if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) return validatedAttributeNameCache[attributeName] = !0;
illegalAttributeNameCache[attributeName] = !0;
console.error("Invalid attribute name: `%s`", attributeName);
return !1;
}
function getValueForAttributeOnCustomComponent(node, name, expected) {
if (isAttributeNameSafe(name)) {
if (!node.hasAttribute(name)) {
switch (typeof expected) {
case "symbol":
case "object":
return expected;
case "function":
return expected;
case "boolean":
if (!1 === expected) return expected;
}
return void 0 === expected ? void 0 : null;
}
node = node.getAttribute(name);
if ("" === node && !0 === expected) return !0;
checkAttributeStringCoercion(expected, name);
return node === "" + expected ? expected : node;
}
}
function setValueForAttribute(node, name, value) {
if (isAttributeNameSafe(name)) if (null === value) node.removeAttribute(name);else {
switch (typeof value) {
case "undefined":
case "function":
case "symbol":
node.removeAttribute(name);
return;
case "boolean":
var prefix = name.toLowerCase().slice(0, 5);
if ("data-" !== prefix && "aria-" !== prefix) {
node.removeAttribute(name);
return;
}
}
checkAttributeStringCoercion(value, name);
node.setAttribute(name, "" + value);
}
}
function setValueForKnownAttribute(node, name, value) {
if (null === value) node.removeAttribute(name);else {
switch (typeof value) {
case "undefined":
case "function":
case "symbol":
case "boolean":
node.removeAttribute(name);
return;
}
checkAttributeStringCoercion(value, name);
node.setAttribute(name, "" + value);
}
}
function setValueForNamespacedAttribute(node, namespace, name, value) {
if (null === value) node.removeAttribute(name);else {
switch (typeof value) {
case "undefined":
case "function":
case "symbol":
case "boolean":
node.removeAttribute(name);
return;
}
checkAttributeStringCoercion(value, name);
node.setAttributeNS(namespace, name, "" + value);
}
}
function getToStringValue(value) {
switch (typeof value) {
case "bigint":
case "boolean":
case "number":
case "string":
case "undefined":
return value;
case "object":
return checkFormFieldValueStringCoercion(value), value;
default:
return "";
}
}
function isCheckable(elem) {
var type = elem.type;
return (elem = elem.nodeName) && "input" === elem.toLowerCase() && ("checkbox" === type || "radio" === type);
}
function trackValueOnNode(node) {
var valueField = isCheckable(node) ? "checked" : "value",
descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
checkFormFieldValueStringCoercion(node[valueField]);
var currentValue = "" + node[valueField];
if (!node.hasOwnProperty(valueField) && "undefined" !== typeof descriptor && "function" === typeof descriptor.get && "function" === typeof descriptor.set) {
var get = descriptor.get,
set = descriptor.set;
Object.defineProperty(node, valueField, {
configurable: !0,
get: function () {
return get.call(this);
},
set: function (value) {
checkFormFieldValueStringCoercion(value);
currentValue = "" + value;
set.call(this, value);
}
});
Object.defineProperty(node, valueField, {
enumerable: descriptor.enumerable
});
return {
getValue: function () {
return currentValue;
},
setValue: function (value) {
checkFormFieldValueStringCoercion(value);
currentValue = "" + value;
},
stopTracking: function () {
node._valueTracker = null;
delete node[valueField];
}
};
}
}
function track(node) {
node._valueTracker || (node._valueTracker = trackValueOnNode(node));
}
function updateValueIfChanged(node) {
if (!node) return !1;
var tracker = node._valueTracker;
if (!tracker) return !0;
var lastValue = tracker.getValue();
var value = "";
node && (value = isCheckable(node) ? node.checked ? "true" : "false" : node.value);
node = value;
return node !== lastValue ? (tracker.setValue(node), !0) : !1;
}
function getActiveElement(doc) {
doc = doc || ("undefined" !== typeof document ? document : void 0);
if ("undefined" === typeof doc) return null;
try {
return doc.activeElement || doc.body;
} catch (e) {
return doc.body;
}
}
function escapeSelectorAttributeValueInsideDoubleQuotes(value) {
return value.replace(escapeSelectorAttributeValueInsideDoubleQuotesRegex, function (ch) {
return "\\" + ch.charCodeAt(0).toString(16) + " ";
});
}
function validateInputProps(element, props) {
void 0 === props.checked || void 0 === props.defaultChecked || didWarnCheckedDefaultChecked || (console.error("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", getCurrentFiberOwnerNameInDevOrNull() || "A component", props.type), didWarnCheckedDefaultChecked = !0);
void 0 === props.value || void 0 === props.defaultValue || didWarnValueDefaultValue$1 || (console.error("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", getCurrentFiberOwnerNameInDevOrNull() || "A component", props.type), didWarnValueDefaultValue$1 = !0);
}
function updateInput(element, value, defaultValue, lastDefaultValue, checked, defaultChecked, type, name) {
element.name = "";
null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type ? (checkAttributeStringCoercion(type, "type"), element.type = type) : element.removeAttribute("type");
if (null != value) {
if ("number" === type) {
if (0 === value && "" === element.value || element.value != value) element.value = "" + getToStringValue(value);
} else element.value !== "" + getToStringValue(value) && (element.value = "" + getToStringValue(value));
} else "submit" !== type && "reset" !== type || element.removeAttribute("value");
null != value ? setDefaultValue(element, type, getToStringValue(value)) : null != defaultValue ? setDefaultValue(element, type, getToStringValue(defaultValue)) : null != lastDefaultValue && element.removeAttribute("value");
null == checked && null != defaultChecked && (element.defaultChecked = !!defaultChecked);
null != checked && (element.checked = checked && "function" !== typeof checked && "symbol" !== typeof checked);
null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name ? (checkAttributeStringCoercion(name, "name"), element.name = "" + getToStringValue(name)) : element.removeAttribute("name");
}
function initInput(element, value, defaultValue, checked, defaultChecked, type, name, isHydrating) {
null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type && (checkAttributeStringCoercion(type, "type"), element.type = type);
if (null != value || null != defaultValue) {
if (!("submit" !== type && "reset" !== type || void 0 !== value && null !== value)) return;
defaultValue = null != defaultValue ? "" + getToStringValue(defaultValue) : "";
value = null != value ? "" + getToStringValue(value) : defaultValue;
isHydrating || value === element.value || (element.value = value);
element.defaultValue = value;
}
checked = null != checked ? checked : defaultChecked;
checked = "function" !== typeof checked && "symbol" !== typeof checked && !!checked;
element.checked = isHydrating ? element.checked : !!checked;
element.defaultChecked = !!checked;
null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name && (checkAttributeStringCoercion(name, "name"), element.name = name);
}
function setDefaultValue(node, type, value) {
"number" === type && getActiveElement(node.ownerDocument) === node || node.defaultValue === "" + value || (node.defaultValue = "" + value);
}
function validateOptionProps(element, props) {
null == props.value && ("object" === typeof props.children && null !== props.children ? React.Children.forEach(props.children, function (child) {
null == child || "string" === typeof child || "number" === typeof child || "bigint" === typeof child || didWarnInvalidChild || (didWarnInvalidChild = !0, console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to